Фильтрация QuerySet в Djnago, где поле имеет определенное значение или является null

как правильно сделать это в Django, я хочу фильтровать кверисет, где поле имеет определенное значение или является null, что означает, что если я отфильтрую кверисет по полю "type", он вернет кверисет с объектами, имеющими определенное значение типа "active", а также объект с "type" имеет значение null

любая помощь будет очень признательна

Вы можете работать с Q объектами [Django-doc] для этого:

MyModel.objects.filter(
    Q(type='active') | Q(type=None)
)

Здесь мы объединяем два объекта Q, которые действуют как фильтры с побитовым оператором или |, и это означает, что мы создаем фильтр, который действует как логическое или между двумя условиями фильтра.

В документации Django есть целый раздел, посвященный поиску полей в модели . Но если вы не хотите возиться с этим, вот несколько примеров:

# Obtaining all non-null fields
Model.objects.filter(some_field__isnull=False)

# Obtaining all rows with field value greater than some value
Model.objects.filter(some_field__isnull=False, some_field__gt=value)

# Actually the better way of writing complex queries is using Q objects
from django.db.models import Q
Model.objects.filter(Q(some_field__isnull=False) & Q(some_field__gt=value)) # The same thing as the previous example

# Using Q objects in this situation may seem useless and it kinda is, but as for me
# This improves readability of your query

Есть еще много вещей, которые вы можете захотеть сделать с вашим полем, но я думаю, что описал наиболее распространенный случай использования.
Редактирование
Как написано в ответе Виллема, чтобы получить строки, имеющие значение "active" или null, нужно написать такой запрос:

Model.objects.filter(Q(type='active') | Q(type__isnull=True))

Надеюсь, это поможет.

Я думаю, что это самая простая техника для достижения вашей цели.

Model.objects.filter(Q(type='active') | Q(type=True))

Вернуться на верх