Итак, я начал кодировать систему фильтрации для моего django приложения. Это выглядит так:
class Person(models.Model):
first_name = models.CharField(max_length = 50)
middle_name = models.CharField(max_length = 50)
last_name = models.CharField(max_length = 50)
Я хотел отфильтровать, у какого Person есть поле, содержащее значение x, если другие поля пусты, как этот алгоритм
results = Person.objects.filter(first_name__contains = "a")
, но если другие поля не пустые, я хочу отфильтровать это так
results = Person.objects.filter(first_name__contains = "a", middle_name__contains = "a", last_name__contains = "a")
в зависимости от того, какие поля не имеют пустых значений.
моя первая попытка была такой:
if first_name != "":
results = Person.objects.filter(first_name__contains = first_name)
if middle_name != "":
results = results.filter(middle_name__contains = middle_name)
if last_name != "":
results = results.filter(last_name__contains = last_name)
Моя проблема здесь заключается в том, что он фильтрует его последовательно, поэтому, если я отфильтрую только middle_name
или last_name
, он выдаст мне ошибку, поскольку results
еще не определен, может ли кто-нибудь помочь мне с этим?
Есть ли алгоритм, который идет так? results = Person.objects.filter(first_name__contains = first_name if first_name != "" else JUST REMOVE THIS FILTER)
? потому что, если он фильтрует ""
, он вернет все ваши данные. Заранее спасибо