Jo aha, ty fakt chces vratit ten "state" jakoze string :) Hele a neni jednodussi se ten field proste hodit na model a udrzovat si ho pomoci signalu/savu apod? Pak mas pokoj (na dvou mistech minimalne) ;) --- In Perl you shoot yourself in the foot, but nobody can understand how you did it. Six months later, neither can you. | print 'aknerats'[::-1]
On Wed, Jun 19, 2019 at 9:31 AM starenka . <[email protected]> wrote: > Cau Fosile, > > jmeno toho "getteru" mi hlava nebere, ale co kdyby vnitrek byl neco ala: > > @property > def state(self): > self.in_state('published') | self.in_state('expired') ..... > > > Hm? > > --- > aknerats[::-1] > > On Tue, Jun 18, 2019, 22:57 Fosil <[email protected]> wrote: > >> Zdravím, >> řeším následující problém: >> >> Mám model: >> >> class Article(models.Model): >> ... >> publication_start = models.DateTimeField("Zacatek publikace") >> publication_end = models.DateTimeField("Konec publikace") >> approved = models.BooleanField("Schváleno", default=False) >> ... >> >> >> # k tom u custom queryset >> >> objects = ArticleQuerySet.as_manager() >> >> >> >> class ArticleQuerySet(models.QuerySet): >> >> >> >> def in_state(self, state): >> >> >> now = timezone.now() >> >> >> # draft >> if state == 'draft': >> return self.filter(approved=False) >> >> >> # published >> if state == 'published': >> return self.filter(approved=True).filter(publication_start__lte=now >> ).filter(publication_end__gte=now) >> >> >> # expired >> if state == 'expired': >> return self.filter(approved=True).self.filter(publication_end__lte >> =now) >> >> >> a zároveň chci v tom modelu mít definovaný getter, který mi pro konkrétní >> instanci vrátí její stav >> tzn.: >> >> class Article(models.Model): >> >> ... >> ... >> @property >> def state(self): >> # tady v podstate (alepon tedy ideove) stejny kod jako v >> ArticleQuerySet.in_state, ale vraci hodnoty 'draft'|'published'|'expired' >> >> >> a teď už konečně otázka: >> šlo by to nějak napsat aby buznys logika toho rozhodování stavu byla na >> jednom místě - páč když se změní tak jí musím přepisovat na dvou místech a >> to neprospívá kódu ani životnímu prostředí :-) >> >> Díky za každé nakopnutí (v pozitivním smyslu slova) >> >> -- >> -- >> E-mailová skupina [email protected] >> Správa: http://groups.google.cz/group/django-cs >> --- >> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny >> „django-cs“ ve Skupinách Google. >> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, >> zašlete e-mail na adresu [email protected]. >> Chcete-li tuto diskusi zobrazit na webu, navštivte >> https://groups.google.com/d/msgid/django-cs/026b41c8-4798-46db-bdee-56c6bfad5d8a%40googlegroups.com >> <https://groups.google.com/d/msgid/django-cs/026b41c8-4798-46db-bdee-56c6bfad5d8a%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> Další možnosti najdete na https://groups.google.com/d/optout. >> > -- -- E-mailová skupina [email protected] Správa: http://groups.google.cz/group/django-cs --- Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google. Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu [email protected]. Chcete-li zobrazit tuto diskusi na webu, navštivte https://groups.google.com/d/msgid/django-cs/CA%2B7MNVrc5XEnLpWbsQKTk5fbPnHWWybWO3M2yy4nfFzT0EsnKA%40mail.gmail.com. Další možnosti najdete na adrese https://groups.google.com/d/optout.
