gpt4 book ai didi

python - Prefetch_related() 加入第一项

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:45 34 4
gpt4 key购买 nike

我几乎可以肯定我在这里做错了什么,但我想不通。

在我的应用程序中,项目可以存储在工作区中,如下所示:

# models.py    
class Item(models.Model):
name = models.CharField()

class Workspace(models.Models):
name = models.CharField()
items = models.ManyToManyField(
Item,
related_name="workspaces",
null=True,
blank=True,
default=None)

然后,在我的 ListView 中,我想显示项目及其相关的工作区:

# views.py
class ListItems(ListView):
model = Items
template_name = "list_items.html"
def get_queryset(self):
return self.model.objects.all().prefetch_related('workspaces')

错误出现在我的模板中:

# list_items.html
{% for object in object_list %}

{{ object.name }}
Workspaces :
{% for workspace in object.workspaces.all %}
{{ workspace.name }}
{% empty %}
No workspaces
{% endfor %}
{% endfor %}

假设我有 10 个不同的项目和一个名为“Foo”的文件夹。而不是像这样显示我的模板:

Item1
workspaces: Foo

Item2
workspaces: Foo

Item3
workspaces: Foo

#etc...

我得到以下输出:

Item1
workspaces: Foo Foo Foo Foo Foo Foo Foo Foo Foo Foo # 1 Foo per item in list

Item2
workspaces: No workspaces

Item3
workspaces: No workspaces

#etc...

似乎 prefetch_related() 将所有工作区关联到列表中的第一项。如果我删除 get_queryset() 的 prefetch_related() 部分,我会得到正确的输出,但需要更多的查询。

我在这里做错了什么?

我的应用要复杂得多,所以可能我简化了太多。特别是,我的 get_queryset() 方法在 prefetch_related() 指令之前涉及更多过滤器。如果您需要更多数据,请告诉我。

感谢您的帮助!

最佳答案

我刚刚意识到我忘记了一个非常重要的元素:我正在为我的基本模型使用 django-polymorphic。我跑过some 测试并且没有多态,prefetch_related 按预期工作。

我在 django-polymorphic bug tracker 中打开了一个问题:https://github.com/chrisglass/django_polymorphic/issues/68

对于这个错误,我深表歉意,也很抱歉耽误了您的时间。

关于python - Prefetch_related() 加入第一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19333029/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com