2

これは私のモデルです:

class People(models.Model):
    name = models.CharField(max_length=100)
    lastname = models.CharField(max_length=100)

views.pyで

-これを試して空の姓のフィールドを数えると:

People.objects.filter(lastname__isnull=True).count()

空の姓のフィールドがいくつかありますが、常に0イベントを返します。

なぜ0になるのですか、コードに問題がありますか、またはテーブル内の空のフィールドをカウントする他の方法はありますか?

4

1 に答える 1

3

あなたCharFieldはおそらくNULLではなく空の文字列を保存しています

nullフィールド値に関するDjangoドキュメント

Field.null
True の場合、Django は空の値を NULL としてデータベースに保存します。デフォルトは偽です。

空の文字列値は、NULL としてではなく、常に空の文字列として格納されることに注意してください。整数、ブール値、日付などの非文字列フィールドには null=True のみを使用してください。どちらのタイプのフィールドでも、null パラメータはデータベース ストレージにのみ影響するため、フォームで空の値を許可する場合は blank=True を設定する必要があります (blank を参照)。

特別な理由がない限り、CharField や TextField などの文字列ベースのフィールドで null を使用しないでください。文字列ベースのフィールドに null=True がある場合、それは「データなし」の 2 つの可能な値 (NULL と空の文字列) があることを意味します。ほとんどの場合、「データなし」に対して 2 つの可能な値を持つことは冗長です。Django の規則では、NULL ではなく空の文字列を使用します。

クエリを次のように変更してみてください。

People.objects.filter(lastname="").count()

空は NULL と同じではありません。フィールドを have に設定する必要がnull=Trueありましたが、ドキュメントが示唆しているように、CharField には推奨されません。

于 2012-10-08T23:28:40.673 に答える