Was ist der richtige Weg, um das Jahr aus einem DateTimeField zu extrahieren?Erhalten Jahr von Django DateTimeField mit Werten()
Beispiel gegeben:
class Article(models.Model):
title = models.CharField(_('title'), max_length=250)
slug = models.SlugField(_('slug'), max_length=250, unique=True, default='', blank=True)
content = models.TextField(_('content'))
author = models.ForeignKey(settings.AUTH_USER_MODEL)
categories = models.ManyToManyField(Category)
tags = models.ManyToManyField(Tag)
created = models.DateTimeField(_('created'), default=timezone.now)
publish_date = models.DateTimeField(_('publish date'), blank=True, null=True)
STATUS_ARTICLE = (
('DRAFT', _('draft')),
('PUBLISHED', _('published'))
)
status = models.CharField(_('status'), max_length=100, choices=STATUS_ARTICLE, default='DRAFT')
class ExtractMonth(Func):
template = "EXTRACT(MONTH FROM %(expressions)s)"
def __init__(self, *expressions, **extra):
extra['output_field'] = models.SmallIntegerField()
super().__init__(*expressions, **extra)
eine Liste von all den Jahren zu erhalten versuchen, und die Anzahl der Artikel pro Jahr:
result = Article.objects.filter(status='PUBLISHED').annotate(Year=ExtractYear('publish_date')).values('Year').annotate(dcount=Count('Year'))
Dieses in den folgenden Fehlern führt:
near "FROM": syntax error
Die resultierende Abfrage lautet:
SELECT EXTRACT(YEAR FROM "articles_article"."publish_date") AS "Year", COUNT(EXTRACT(YEAR FROM "articles_article"."publish_date")) AS "dcount" FROM "articles_article" WHERE "articles_article"."status" = PUBLISHED GROUP BY EXTRACT(YEAR FROM "articles_article"."publish_date"), "articles_article"."created" ORDER BY "articles_article"."created" DESC
Dies scheint eine komplizierte Lösung zu sein, was ein einfacher Anwendungsfall sein soll. Das Extrahieren des Jahrs aus einem datetimefield sollte keinen Entwickler erfordern, um benutzerdefiniertes SQL zu schreiben. Auch in welchem Modul ist "Func" definiert? –
Lösungsvorschlag funktioniert nicht.Der folgende Fehler ist aufgetreten: in der Nähe von "FROM": Syntaxfehler –
Die Abfrage, die generiert wird, teste ich dies lokal in der SQLite-Datenbank: SELECT EXTRACT (JAHR VON "articles_article". "Publish_date") AS "Year", COUNT (EXTRACT (JAHR VON "articles_article". "Publish_date")) AS "dcount" VON "articles_article" WHERE "articles_article". "Status" = VERÖFFENTLICHTE GROUP BY EXTRACT (JAHR von "articles_article". "Publish_date"), "articles_article "." erstellt "ORDER BY" articles_article "." created "DESC –