我在 Django 中编写了一个复杂的搜索表单。
这是我的示例模型:
class student(models.Model):
name = models.CharField(max_length=255)
school = models.ForeignKey('school', null=True, blank=True)
class school(models.Model):
name = models.CharField(max_length=255)
所以学生使用 FK 上学。它应该是可选的,所以null=True
和blank=True
被使用。如果我想搜索具有特定学校名称的学生,我使用带有 HTML 代码的表单,如下所示:
<input type="text" name="school_name"/>
我确实像这样查询数据库(示例):
def search(request):
results = student.objects.filter(
name__icontains=request.POST.get('student_name',''),
school__name__icontains=request.POST.get('school_name','')
)
问题是:如果我将搜索表单留空,它应该显示所有学生,因为没有应用过滤器。如果每个学生都设置了一所学校,那就行得通。如果学生没有设置学校,则它在 MySQL 中的值为“NULL”。我假设找不到它们,因为空字符串不是 NULL。但我怎样才能避免呢?我必须在每个过滤器表达式之前写一个 if 语句吗?我们谈论要过滤的 50-100 个字段!
我会感谢每一个提示来解决这个问题。