Biblioteka Pythona

Dyskusja: Konwersja danych w szablonach

Serwis poświęcony Pythonowi - wszechstronnemu językowi programistycznemu. Podstawy i kurs Pythona, Django, PyQt4.

blq napisał: 30 Czerwiec 2009, godzina 12:40
  • Witam!

    Mam sobie dwa modele Users i Messages. W users mam dwa pola ident i password a w messages mam :nadawaca,adresat,datanadania,tresc,tytul. I teraz problem jest taki że w modelu Messages nadawca i adresat to int ktore mają zawierać id tych użytkowników. Wszystko działa do momentu wyświetlania listy wiadomości. W szablonie przyjmuje object kożystając z Paginator. Obiekt ten jest obiektem wiadomości danego usera. Gdy chcę wyświetlić nadawcę dostaję tylko id. Jak w szablonie za pomocą id pobrać ident z modelu Users.

    Pozdrawiam blq
riklaunim napisał: 30 Czerwiec 2009, godzina 12:46
  • A masz relację w Messages do Users? I też standardowo opiera się ona na kolumnie ID, która zawsze jest tworzona (chyba że ustawisz inaczej).
blq napisał: 30 Czerwiec 2009, godzina 14:02
  • Miałem ale gdy chcaiłem zrobić i dla nadawca i dla adresat sypało się
riklaunim napisał: 30 Czerwiec 2009, godzina 14:10
  • No napraw :P To będzie wszystko ładnie działać, a nie że "nie działa to usunę".
Sayane napisał: 04 Lipiec 2009, godzina 22:50
  • Sorry, że tak późno, ale może się przyda ;-)

    Sypie się, ponieważ jest konflikt related_name. Oto co się dzieje. Model:
    class Message(models.Model):
        nadawca = models.ForeignKey(User)
        adresat = models.ForeignKey(User)
    

    Teraz django próbuje utworzyć w modelu User dwie relacje o nazwie message_set (ba, jeżeli jest to User z django.contrib.auth.models to dodatkowo istnieje taka sama relacja z modelu Message z tejże aplikacji). Rozwiązanie jest proste. Wystarczy odpowiednio zmodyfikować model:
    class Message(models.Model):
       nadawca = models.ForeignKey(User, related_name='wyslane_wiadomosci')
       adresat = models.ForeignKey(User, related_name='wiadomosci')
    

    Teraz django zamiast tworzyć dwie konfliktowe relacje, tworzy relacje o nazwach wyslane_wiadomosci oraz wiadomosci, czyli można się odwoływać:
    User.wiadomosci.all()
    User.wyslane_wiadomosci.all()
    


Nie możesz dodawać nowych Tematów
Nie możesz dodawać nowych postów
Nie jesteś moderatorem