あなた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 には推奨されません。