Django, Abfragefilterung von der Modellmethode
Habe ich diese Modelle:
def Foo(Models.model):
size = models.IntegerField()
# other fields
def is_active(self):
if check_condition:
return True
else:
return False
def Bar(Models.model):
foo = models.ForeignKey("Foo")
# other fields
Jetzt möchte ich Abfrage Bars, die aktiv Foo ' s als solche:
Bar.objects.filter(foo.is_active())
Ich bin immer Fehler wie
SyntaxError at /
('non-keyword arg after keyword arg'
Wie kann ich das erreichen?
InformationsquelleAutor der Frage Hellnar | 2010-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht Abfragen gegen das Modell von Methoden oder Eigenschaften. Verwenden Sie entweder die Kriterien innerhalb der in der Abfrage oder filter in Python mit Hilfe einer list comprehension oder genex.
InformationsquelleAutor der Antwort Ignacio Vazquez-Abrams
Können Sie auch eine benutzerdefinierte manager. Dann könnte man etwa wie folgt ausgeführt:
Und alles, was Sie tun müssen, ist:
Check-out die docs.
InformationsquelleAutor der Antwort 0sh
Hatte ich ähnliches problem: ich bin mit class-based view
object_list
und ich hatte auf filter-Modell - Methode. (durch das speichern der Informationen in der Datenbank war keine option, da das Anwesen wurde basierend auf Zeit und ich würde erstellen Sie einen cronjob und/oder... keine Möglichkeit)Meine Antwort ist unwirksam, und ich weiß nicht, wie es ist gonna Skala mit größeren Datenmengen, aber es funktioniert:
InformationsquelleAutor der Antwort SummerBreeze
Können Sie keine filter auf Methoden, jedoch, wenn die is_active Methode Foo prüft ein Attribut Foo, können Sie die Doppel-Unterstrich-syntax, wie
Bar.objects.filter(foo__is_active_attribute=True)
InformationsquelleAutor der Antwort Gabriel Hurley
Werden können, Sie können einfache filter, die für diese Art von Bedingungen.
InformationsquelleAutor der Antwort Sergey Luchko