したがって、Country
という外部キーを持つモデルCity
があるとします。データベースでは、1つ以上の都市でいくつかの国が選択され、一部では選択されなかった国もあります。外部キーとして選択されている項目を取得するためのDjangoクエリ?
選択されていない都市を除いて、1つ以上の都市で選択された国のみをどのように見つけることができますか?
したがって、Country
という外部キーを持つモデルCity
があるとします。データベースでは、1つ以上の都市でいくつかの国が選択され、一部では選択されなかった国もあります。外部キーとして選択されている項目を取得するためのDjangoクエリ?
選択されていない都市を除いて、1つ以上の都市で選択された国のみをどのように見つけることができますか?
# Get all countries that have at least one city
Country.objects.exclude(city__isnull=False)
これを試してみてください:ここ
from django.db.models import Count
Country.objects.annotate(city_count=Count('city_set')).filter(city_count__gt=1)
ドキュメント:https://docs.djangoproject.com/en/dev/topics/db/aggregation/#joins-and-aggregates
私は答えとしてこれを持っていたが、私はそれが動作する100%ではないと私は、現時点ではそれをテストすることはできません。試してみてください: 'Country.objects.exclude(city__isnull = True)'。 [あなたは照会時に逆の関係にアクセスできます](https://docs.djangoproject.com/ja/dev/topics/db/queries/#lookups-that-span-relationships)ので、それらを除外することができます都市と後方関係はありません。それがうまくいけば、私は答えとして投稿します –
残念ながら '国家'はフィールド '都市'を持っていません、それは逆です。 'Country'には' city_set'プロパティがありますが、このセットが空でない国だけが必要です。 –
クエリ内で関係を後方に追うことができるはずです。 +1都市を持つ国は '(city__isnull = False)'にする必要があります。 –