首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对多个相关对象的Django查询

对多个相关对象的Django查询
EN

Stack Overflow用户
提问于 2019-08-21 21:48:00
回答 1查看 95关注 0票数 0

我在许多模型之间进行查询时遇到了问题。

这是我执行的查询,用于显示所有动物及其对应的带有encounter.status“正在进行中”的疫苗,以及未来的免疫日期。

代码语言:javascript
复制
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")
    )

问题是,当我想要列出查询中的免疫时,我得到了这个动物的所有免疫,而不仅仅是将来必须发生的免疫。

代码语言:javascript
复制
{% for immunization in object.subject.immunizations.all %}
     {{ immunization }}
{% endfor %}

这就是模型

代码语言:javascript
复制
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:

我想我已经通过使用过滤预取解决了这个问题。就像这样。

代码语言:javascript
复制
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")
    )
EN

回答 1

Stack Overflow用户

发布于 2019-08-21 22:35:47

在你的动物模型中,你没有外键/M2M对免疫的引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57593181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档