我在跨多个模型进行查询时遇到麻烦。
这是我要显示的所有动物及其相应疫苗的清单,状态为“进行中”,免疫日期为未来。
def current_with_futur_vaccines(self):
return (
Encounter.objects.filter(
status="in-progress").filter(
subject__immunizations__recorded__gte=datetime.now(),
)
.select_related("subject")
.prefetch_related("subject__immunizations", "location")
)
问题是,当我想从查询中列出免疫接种时,我获得了该动物的所有免疫接种,而不仅是将来必须进行的免疫接种。
{% for immunization in object.subject.immunizations.all %}
{{ immunization }}
{% endfor %}
这是模型
class Animal(models.Model):
name = models.CharField(max_length=250)
class Encounter(models.Model):
subject = models.ForeignKey(Animal, on_delete=models.PROTECT)
status = models.CharField(max_length=11)
class Vaccine(models.Model):
name = models.CharField(max_length=250)
class Immunization(models.Model):
subject = models.ForeignKey(
Animal, on_delete=models.PROTECT, related_name="immunizations"
)
recorded = models.DateTimeField(default=timezone.now)
vaccine = models.ForeignKey(Vaccine, on_delete=models.PROTECT)
编辑 当我调用all()时,我并不希望获得与FK相关的所有结果。我想要的是查询过滤的结果。在我的示例中,所有遇到的事件都用记录的日期进行了过滤,但是当我可以使用.all()进行相关的免疫接种条目时,我得到的过滤的免疫接种结果并未按记录进行过滤,而是全部过滤。
编辑2:
我想我已经通过使用过滤的预取来解决了。像这样的东西。
def current_with_futur_vaccines(self):
immunizations_prefetch = models.Prefetch("subject__immunizations", Immunizations.objects.filter(recorded__gte=datetime.now())
return (
Encounter.objects.filter(
status="in-progress").filter(
subject__immunizations__recorded__gte=datetime.now(),
)
.select_related("subject")
.prefetch_related(immunizations_prefetch, "location")
)
答案 0 :(得分:0)
您没有动物模型中涉及免疫的外键/ M2M参考。