Python 获取模型中具有特定字段值或不在相关模型中的对象

Python 获取模型中具有特定字段值或不在相关模型中的对象,python,django,django-orm,Python,Django,Django Orm,我是django新手,所以复杂的查询变得越来越困难 我有一个模型动物和热我想去拿一只动物 与farm=1和

我是django新手,所以复杂的查询变得越来越困难

我有一个模型
动物
我想去拿一只动物 与
farm=1
动物相关的实例 具有
Heat.is\u active=True和
Heat.is\u reded=False的实例

这是我的模型

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
    )

如果动物实例有热记录,我可以获取数据,但是如果没有热记录,我无法获取任何数据

您可以使用
Q()
对象在两对条件之间使用

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))
)

这将为您提供一个查询集,其中包含甚至没有热记录的动物。

您可以使用
Q()
对象在两对条件之间使用

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))
)

这将为您提供一个查询集,其中包含的动物甚至没有热记录。

@Evans\u Murithi您有gmail吗?我很感激sir@Evans_Murithi你有gmail吗?我很感激,先生