Ano, v mnoha případech by to uložení fieldu držícícho stav bylo ideální,
ale tady je problém v tom, že výsledný stav je závislý na aktuálním čase,
takže tady to nejde - to je to co řeším
Dne úterý 18. června 2019 22:57:43 UTC+2 Fosil napsal(a):
>
> 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 zobrazit tuto diskusi na webu, navštivte
https://groups.google.com/d/msgid/django-cs/027093fd-97f2-47f5-ab15-6ef274ec4cd1%40googlegroups.com.
Další možnosti najdete na adrese https://groups.google.com/d/optout.