gpt4 book ai didi

django - 如何将值过滤器与我的 Django 模型上某个外键字段的查询集结合起来

转载 作者:行者123 更新时间:2023-12-04 15:45:39 25 4
gpt4 key购买 nike

我的模型中有这个字段:

class PlayerDetailPage(Page):
picture = models.ForeignKey('wagtailimages.Image', null=True, on_delete=models.SET_NULL, related_name='+', help_text=_('Player profile picture.'))

我想创建一个包含标记,我可以在其中访问此 Wagtail 页面模型上的不同字段。为了提高数据库效率,我使用值,但在 picture 字段上我想要完整的查询集。不仅仅是字典中的值,因为我需要渲染图像。

现在我有这样的看法:

PlayerDetailPage.objects.values('title', 'path' , 'slug', 'owner__age', 'owner__nationality', )

到目前为止一切顺利,我只提取了我需要的字段,并且通过一个查询得到了一本不错的字典。但是对于 picture 字段,我想要完整的查询集,因为它是一个 Wagtail 图片字段。它附有一些不错的渲染选项。在我看来,如何将其结合起来以获得最佳的数据库高效查询?

不幸的是,直接 url 不是图像模型中的一个字段我猜它是一个属性,我尝试了 picture__url 但解决了:

Cannot resolve keyword 'url' into field. Choices are: collection, collection_id, created_at, file, file_hash, file_size, focal_point_height, focal_point_width, focal_point_x, focal_point_y, height, id, renditions, tagged_items, tags, title, uploaded_by_user, uploaded_by_user_id, width

我的看法:

@register.inclusion_tag('wdashboard/tags/player_widget.html', takes_context=True)
def player_widget(context):

qs = PlayerDetailPage.objects.values('title', 'path' , 'picture__file', 'slug', 'owner__age', 'owner__nationality', )
for ins in qs:
ins['picture'] = Image(file=ins['picture__file'])

return {'values1': qs,'request': context['request'],}

最佳答案

如果没有棘手的解决方案恕我直言,您正在寻找的东西是不可能的。原因是 values 方法只在 db 上运行一次定义明确的查询,然后将结果转换为 dict。所以你永远不会得到原始的 PlayerDetailPage 对象,而是一个字典。例如,如果您有一个模型 MyModel 并且您执行以下操作

x = MyModel.objects.get(id=1)
print(type(x)) # <class 'MyModel'>

但对于值,情况不同

x = MyModel.objects.values('id').get(id=1)
print(type(x)) # <class 'dict'>

所以你失去了原始对象并得到了一个字典。

一个小聪明的解决方案

如果您别无选择,只能使用 values,我建议您采用以下解决方案。

构建您的查询并从 Image 模型中获取您需要的数据

 qs = PlayerDetailPage.objects.values('picture__name') # assume there is a name field.

现在遍历 qs,初始化一个 Image 对象,(不要保存它)并像这样将它添加到你的字典中

from wagtail.images.models import Image

for ins in qs:
ins['picture'] = Image(name=ins['picture__name'])

现在您的值 qs 中有一张图片作为实例,您可以使用附带的漂亮渲染选项

关于django - 如何将值过滤器与我的 Django 模型上某个外键字段的查询集结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55893844/

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