Ich habe das folgende Modell:
%Vor% Jetzt muss ich nach allen Process
Objekten fragen, die abgelaufen sind, entsprechend ihrem Wert von days_activation
.
Ich habe es versucht
%Vor%und folgende Fehlermeldung wurde angezeigt:
TypeError: nicht unterstützter Typ für die Komponente "timedelta days": F
Ich kann es natürlich in Python machen:
%Vor% aber ich muss wirklich ein django.db.models.query.QuerySet
erzeugen.
Sie mischen zwei Ebenen: Runtime-Ebene und Datenbankebene. F
function ist nur ein Hilfsprogramm, mit dem Sie etwas komplexere Abfragen mit django ORM erstellen können. Sie verwenden timedelta
und F
zusammen und erwarten, dass django ORM schlau genug ist, diese Dinge in Raw SQL umzuwandeln, aber das kann ich nicht sehen. Vielleicht liege ich falsch und weiß nichts über Django ORM.
Wie auch immer, Sie können Ihren ORM-Aufruf mit extra extra umschreiben und den WHERE-Klausel, die manuell native SQL-Funktionen verwendet, die gleich datetime.now()
und timedelta
sind.
Sie müssen Aggregat erweitern. Mach es wie folgt:
%Vor%Hoffentlich wird es für dich arbeiten. :)
F
ist tiefschwarze Django-Magie und die Objekte, die darauf treffen
muss zu den entsprechenden magischen Kreisen gehören, um damit umzugehen.
In Ihrem Fall weiß django.db.models.query.filter
über F
, aber datetime.timedelta
nicht.
Daher müssen Sie die F
aus der timedelta
-Argumentliste entfernen.
Glücklicherweise wird die Multiplikation von timedelta * int
von F
unterstützt,
Folgendes kann also funktionieren:
Wie sich herausstellt, funktioniert mit PostgreSQL , funktioniert aber nicht mit SQlite (für das Django 1.11 nur +
und -
für timedelta
unterstützt,
vielleicht wegen einer entsprechenden SQlite-Beschränkung).