Nehmen wir an, ich habe zwei Tabellen in Django, TableA
und TableB
. Tabelle A enthält ein boolesches Feld, bool
, und TableB
enthält ein Fremdschlüsselfeld, for_field
bis TableA
, das Null sein kann.Django filtert ein ForeignKey-Feld, wenn es null ist
class TableA(models.Model):
bool = models.BooleanField()
class TableB(models.Model):
for_field = models.ForeignKey('TableA', null=True)
Wenn ich will TableB filtern, um alle Einträge zu bekommen, wo for_field.bool
True
oder for_field
ist Null
ist, was ist der kürzeste Weg, um dies zu erreichen?
Ich benutze .filter((Q(for_field__is_null=True) | Q(for_field__bool=True))
, aber ich frage mich, ob es kürzere Code dafür gibt.
Haben Sie versucht '.exclude (for_field__bool = False)'? Gibt es dieselben Ergebnisse? – valignatev
Ich dachte darüber nach, aber ich bin mir nicht sicher, ob Django einen Fehler auslösen wird, wenn er versucht, auf 'bool' in einem' Null'-Fremdschlüsselfeld zuzugreifen. – mtcg
Eine kleine Verbesserung: 'Q (for_field__is_null = True)' ist äquivalent zu 'Q (for_field = None)'. – knbk