Есть ли более простой способ проверить, является ли фильтр, по которому я фильтрую, NULL в django?
Мне интересно, есть ли более простой способ игнорировать значения NULL при фильтрации в django. Я имею в виду не NULL значения в базе данных, а скорее потенциальные NULL значения, по которым я фильтрую. Вот мой код на данный момент:
if data['grade'] is not None:
posts = posts.filter(grade=data['grade'])
if data['subject'] != '':
posts = posts.filter(subject=data['subject'])
Есть ли способ избежать всех пунктов if и написать фильтр в одном операторе? Заранее спасибо!
from django.db.models import Q
MyModel.objects.filter(~Q(grade__isnull=False) & ~Q(subject__exact=''))
edit:
Вы можете взять идею отсюда Django Filter Model by Dictionary
или вы можете сделать копию из своих данных
for i in data.copy():
if data[i] == "" or data[i] == None:
data.pop(i)
или
for i in data.copy():
if not data[i]:
data.pop(i)
после этого MyModel.objects.filter(**data)