Мы можем создать функцию, которая создает Q
-объект [Django-doc] только для значений, отличных от None
, например:
from django.db.models import Q
def q_without_none(**kwargs):
return Q(**{k: v for k, v in kwargs.items() <b>if v is not None</b>})
или, если вы также хотите исключить пустую строку:
from django.db.models import Q
def <b>q_without_empty</b>(**kwargs):
return Q(**{k: v for k, v in kwargs.items() <b>if v not in (None, '')</b>})
Тогда мы можем построить запрос как:
raport_pacient = Pacient.objects.filter(
<b>q_without_none(</b>
data_creare_pacient__year__gte=de_la,
data_creare_pacient__year__lte=pana_la,
data_iesire__isnull=iesit,
data_deces__isnull=iesit,
adresa_pacient__judet__nume_judet=judet,
adresa_pacient__localitate__nume_localitate=localitate,
categorie=categorie,
stare_civila=stare_civila,
medic=request.user.medic
<b>)</b>
)
Примечание : хотя на самом деле это не ваш вопрос, использование JsonResponse
с safe=False
, как следует из названия, не очень безопасно. Было эксплойтов со списками для JSON , поэтому обычно лучше определить словарь на верхнем уровне, например:
return JsonResponse({'data': serializer.data})