Как отфильтровать как нулевое, так и определенное значение в одном и том же поле в Django?

Итак, вот поле, которое у меня есть в одной из моих моделей:

year = models.ForeignKey(Year, blank=True, null=True)

Теперь я хочу получить все объекты этой модели, чье поле year равно null или specific_year.

Вот что я пробовал:

MyModel.objects.filter(year__isnull=True, year=specific_year)
MyModel.objects.filter(year__isnull=True).filter(year=specific_year)
MyModel.objects.filter(year__in=[specific_year, None])

но все они дают мне пустой результат.

Я новичок в Django, поэтому, возможно, я что-то упускаю, но я не нашел ответа в документации. Итак, как я могу отфильтровать все объекты, поле year которых равно null или specific_year?


person Cokegod    schedule 07.07.2014    source источник


Ответы (1)


Вы можете использовать объекты Q для комплексной фильтрации.

from django.db.models import Q

MyModel.objects.filter(Q(year__isnull=True) | Q(year=specific_year))

По умолчанию использование , или вложенной фильтрации даст результат AND, тогда как вам нужен результат OR, для которого вы можете использовать Q

person karthikr    schedule 07.07.2014