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のフィールドについて説明します。
これを解決するためのあらゆるヒントに感謝します。