0

次のモデルがあります。

class Parent(models.Model):
    title = models.CharField(max_length=255)


class Child(models.Models):
    title = models.CharField(max_length=255)
    parent = models.ForeignKey(Parent)

子の数が 0 の親からすべてのエントリを取得するにはどうすればよいですか? 親モデルを通じてそれを行う必要があります。次のようなものです。

 Parent.objects.filter(smth_condition)
4

2 に答える 2

2

. from django.db.models import Count

Parent.objects.annotate(cc=Count('child')).filter(cc=0)

annotate() 句を使用して、オブジェクトごとの要約を生成できます。annotate() 句が指定されている場合、QuerySet 内の各オブジェクトには、指定された値で注釈が付けられます。

リレーションシップにまたがるルックアップと同様に、モデルのフィールドまたはクエリ対象のモデルに関連するモデルの集計と注釈には、「逆の」リレーションシップのトラバースを含めることができます。ここでも、関連するモデルの小文字の名前と 2 つのアンダースコアが使用されます。

注釈付きの値もフィルタリングできます。注釈のエイリアスは、他のモデル フィールドと同じように、filter() 句と exclude() 句で使用できます。

テーブルによってはより効果的な別の方法は、次のとおりです。

Parent.objects.filter(child=None)
于 2013-03-28T16:46:37.617 に答える
1

また、試してみてください

Parent.objects.filter(child=None)
# or
Parent.objects.filter(child__isnull=True)
于 2013-03-28T16:51:51.153 に答える