我有一个 Django 模型,可以说:

class Person(models.Model):
   first_name = models.CharField(max_length=25)
   last_name  = models.CharField(max_length=25)

并且,存在一个搜索表单,我可以在其中搜索行,无论是按名字、姓氏还是两者。我注意到我可以在 django 查询集中链接过滤器,例如:
def search(request):
   list = Person.objects.filter(first_name= val1).filter(last_name=val2)

但是如果值 val1, val2 之一为空呢?我应该做这样的事情:
def searh(request):
   if val1 != null and val2 == null:
      list = Person.objects.filter(first_name= val1)
   if val2 == null and val2 != null:
       list = Person.objects.filter(last_name= val2)
   if val2 != null and val2 != null:
       list = Person.objects.filter(first_name= val1).filter(last_name=val2)

有没有直接的方法可以做到这一点?

提前致谢

最佳答案

def search(request, val1, val2):
    persons = Person.objects.all()
    if val1:
        persons = persons.filter(first_name=val1)
    if val2:
        persons = persons.filter(last_name=val2)
    return persons

这有效(不是低效的),因为 Querysets are lazy

关于django - Django 中的条件嵌套过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6142001/

10-12 22:13