Cały czas odkrywam coś nowego w Django. Luke Plant ma rację, że te wszystkie opowiadania o blogu w 20 minut, to zwykła propaganda.
Jest to tylko o tyle prawdą, że czas poświęcony na poznawanie Django zostanie odzyskany z nawiązką w przyszłości. Ale dopóki się Django nie zna dobrze, czas pracy nad serwisem jest dłuższy niż gdyby go napisać w php używając kodu pogardliwie określanego nazwą pewnej włoskiej potrawy. Takiego kodu oczywiście pisać nie należy i wierzę, że noce spędzone nad django nie są inwestycją daremną.
Tym razem "odkryłem" bajeczną po prostu właściwość obiektów Pythona reprezentujących modele bazy danych. Otóż relacje jeden do wielu (a także jeden do jeden i wiele do wielu) są zrobione tak, że w obiekcie siedzi nie tyle "identyfikator" obiektu powiązanego (jak to jest w tabelach) ale odwołanie do samego obiektu! Na przykład:
class Person(models.Model): name = models.CharField(max_length=30, verbose_name='Nazwisko') firstname = models.CharField(max_length=30, verbose_name='Imię') class Meta: verbose_name = "Osoba" verbose_name_plural="Osoby" def __unicode__(self): return self.firstname + ' '+ self.name class List(models.Model): login = models.CharField(max_length=50, verbose_name='Nazwa użytkownika') password = models.CharField(max_length=50, verbose_name='Hasło') used = models.OneToOneField(Person) def __unicode__(self): return self.login
I teraz
ja = Person(name="Jędryka", firstname="Michał") l = List(login="alfa", password="beta")
I to co mnie przyprawiło o euforię - nie jest
l.used = ja.id
l.used= ja
Przykład jest może i abstrakcyjny, ale za to jasny ;)