在具有特定字段值的模型中或不在相关模型中获取对象
Get object IN a model with particular field value OR NOT IN a related model
我是 Django 的新手,因此复杂的查询变得越来越困难。
I have a model Animal
and Heat
i would like to fetch an Animal
instance with farm=1
AND sex='female'
AND an Animal
instance with Heat.is_active=True
AND Heat.is_bred=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()
对象在两对条件之间使用 OR:
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
记录的动物。
我是 Django 的新手,因此复杂的查询变得越来越困难。
I have a model
Animal
andHeat
i would like to fetch an Animal instance withfarm=1
ANDsex='female'
AND an Animal instance withHeat.is_active=True
ANDHeat.is_bred=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()
对象在两对条件之间使用 OR:
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
记录的动物。