Ich werde es jedes Mal tun, also als Memo für mich. Ich bin enttäuscht, weil ich keinen passenden Titel finden konnte. ..
Bei der Implementierung von Nachrichtenartikeln in Django ist es meines Erachtens üblich, Felder wie Veröffentlichungsdatum und -zeit sowie Ablaufdatum festzulegen und im Vergleich zum aktuellen Datum und der aktuellen Uhrzeit zwischen öffentlich und privat zu wechseln, jedoch wie folgt Es ist nicht gut zu schreiben.
from django.db import models
from django.utils import timezone
class ArticleManager(models.Manager):
def published(self):
qs = self.get_queryset()
return qs.filter(published_at__lte=timezone.now())
class Article(models.Model):
title = models.CharField('Titel', max_length=100)
published_at = models.DateTimeField('Datum und Uhrzeit der Veröffentlichung', default=timezone.now)
objects = ArticleManager()
class ArticleView(ListView):
queryset = Article.objects.published() #Das ist nicht gut
# queryset = Article.objects.filter(published_at__lte=timezone.now()) #Das ist natürlich auch nutzlos
Wenn Sie einen Moment darüber nachdenken, können Sie sehen, dass das in "ArticleView" angegebene "Abfrageset" eine "Klassenvariable" ist, sodass die Klasse gelesen und der Wert beim Starten des Servers bestimmt wird.
Article.objects.published ()
wird an dem Datum und der Uhrzeit ausgeführt, an dem dieser Prozess ausgeführt wurde. In dem obigen Fall funktioniert es also wie "die Zeit, zu der der Server als aktuelle Uhrzeit gestartet wurde".
Was ich tun möchte, ist "Ich möchte anhand des angeforderten Datums und der angeforderten Uhrzeit beurteilen, ob es öffentlich oder privat ist". Wenn Sie also Folgendes tun, funktioniert es ordnungsgemäß.
from django.db import models
from django.utils import timezone
class ArticleManager(models.Manager):
def published(self):
qs = self.get_queryset()
return qs.filter(published_at=timezone.now())
class Article(models.Model):
title = models.CharField('Titel', max_length=100)
published_at = models.DateTimeField('Datum und Uhrzeit der Veröffentlichung', default=timezone.now)
objects = ArticleManager()
class ArticleView(ListView):
queryset = Article.objects.all()
#Funktioniert bei jeder Anfrage
def get_queryset(self):
qs = super(ArticleView, self).get_queryset()
return qs.published()
Es ist nichts weiter als nur ein "nachlässiger Fehler", aber ich bin süchtig danach, ohne etwas anderes zu bemerken (vielleicht nur ich !!), also sei bitte vorsichtig.
Recommended Posts