検索する必要があるfirst_name
, last_name
& alias
(オプション) があります。そのため、エイリアスが設定されているすべての名前を取得するためのクエリが必要です。
私ができる場合にのみ:
Name.objects.filter(alias!="")
それで、上記に相当するものは何ですか?
検索する必要があるfirst_name
, last_name
& alias
(オプション) があります。そのため、エイリアスが設定されているすべての名前を取得するためのクエリが必要です。
私ができる場合にのみ:
Name.objects.filter(alias!="")
それで、上記に相当するものは何ですか?
あなたはこれを行うことができます:
Name.objects.exclude(alias__isnull=True)
null 値と空の文字列を除外する必要がある場合は、次のように条件を連鎖させることをお勧めします。
Name.objects.exclude(alias__isnull=True).exclude(alias__exact='')
これらのメソッドを連結すると、基本的に各条件が個別にチェックされます。上記の例でalias
は、 が nullまたはName
空の文字列である行を除外するため、null でも空でもないフィールドを持つすべてのオブジェクトが取得されalias
ます。生成された SQL は次のようになります。
SELECT * FROM Name WHERE alias IS NOT NULL AND alias != ""
への 1 回の呼び出しに複数の引数を渡すこともできます。これにより、すべてのexclude
条件を満たすオブジェクトのみが除外されます。
Name.objects.exclude(some_field=True, other_field=True)
ここでは、some_field
と other_field
が true である行が除外されるため、両方のフィールドが true でないすべての行が取得されます。生成された SQL コードは次のようになります。
SELECT * FROM Name WHERE NOT (some_field = TRUE AND other_field = TRUE)
または、ロジックがそれよりも複雑な場合は、Django のQ オブジェクトを使用できます。
from django.db.models import Q
Name.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))
詳細については、このページとDjango ドキュメントのこのページを参照してください。
余談ですが、私の SQL の例は単なる類推です。実際に生成された SQL コードは、おそらく異なって見えるでしょう。Django クエリが生成する SQL を実際に見ることで、Django クエリがどのように機能するかをより深く理解できます。
Name.objects.filter(alias__gt='',alias__isnull=False)
まず、Django のドキュメントでは、CharField や TextField などの文字列ベースのフィールドに NULL 値を使用しないことを強く推奨しています。説明については、ドキュメントを参照してください。
https://docs.djangoproject.com/en/dev/ref/models/fields/#null
解決策: QuerySets でメソッドを連鎖させることもできると思います。これを試して:
Name.objects.exclude(alias__isnull=True).exclude(alias="")
これで、探しているセットが得られるはずです。
Django 1.8 から、
from django.db.models.functions import Length
Name.objects.annotate(alias_length=Length('alias')).filter(alias_length__gt=0)