我在许多模型之间进行查询时遇到了问题。
这是我执行的查询,用于显示所有动物及其对应的带有encounter.status“正在进行中”的疫苗,以及未来的免疫日期。
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")
)发布于 2019-08-21 22:35:47
在你的动物模型中,你没有外键/M2M对免疫的引用。
https://stackoverflow.com/questions/57593181
复制相似问题