2016-12-26 5 views
0

djangoの新機能ですので、複雑なクエリが難しくなります。私はHeat.is_active=TrueHeat.is_bred=False特定のフィールド値を持つモデルでオブジェクトを取得するか、関連するモデルにNOTを入力してください

farm=1sex='female'と動物 インスタンスを動物 インスタンスを取得したいモデルAnimalHeatがここに私である必要があり

モデル。

class Animal(models.Model): 

    farm = models.ForeignKey(Farm, related_name='farm_animals', on_delete=models.CASCADE) 

    name = models.CharField(max_length=25) 
    sex = models.CharField(max_length=7) 

class Heat(models.Model): 

    animal = models.ForeignKey(Animal, related_name='heats', on_delete=models.CASCADE) 

    is_bred = models.BooleanField(default=False) 
    is_active = models.BooleanField(default=True) 

は、これまでのところ、私はこのクエリを試してみました:

Animal.objects.filter(
     farm=1, sex='female', 
     heats__is_active=True, 
     heats__is_bred=False 
    ) 

動物インスタンスがHEAT RECORDを持っている場合、私はNO HEAT RECORDがあった場合しかし、私は、任意のを取得することはできませんデータをフェッチすることができます 。あなたはQ()オブジェクトを使用して条件を二対の間ORを使用することができます

答えて

2

from django.db.models import Q 

Animal.objects.filter(
    (Q(farm=1) & Q(sex='female')) | 
    (Q(heats__is_active=True) & Q(heats__is_bred=False)) 
) 

これは、あなたにもHeatのレコードを持っていない動物を含むクエリセットを提供します。

+0

うわー!できます!もう一度おかげさまで! –

+0

@ ShiftN'Tabあなたは歓迎です –

+0

@Evans_MurithiあなたはGmailを持っていますか? –

関連する問題