gpt4 book ai didi

python - 在 Django 的 DetailView 中使用 get_object() 和aggregate()

转载 作者:行者123 更新时间:2023-12-01 04:51:35 24 4
gpt4 key购买 nike

我在 Django 中有一个 DetailView。在我的模板中,我正在打印对象字典中的字段,例如object.full_name

但我还想要一些属于该对象的聚合。如果说我有一个模型 Person 和一个模型 Group 并且模型 Group 有一个 Person 的外键,然后我可以在我的 DetailView 中重写 get_object() ,使其类似于:

def get_object(self):
return super(DetailView, self).get_object().aggregate(num_groups=Count('group_set'))

我已经测试了我的建议,但它不起作用。我想必须有一些解决方法来做到这一点,而不必覆盖 get_context_data() 并将变量填充为 context['num_groups'] = Group.objects.filter(person=self.对象).count()。这是可以做到的,但如果我有多个具有 Person 外键的模型,如果我可以像我的代码示例中那样使用聚合来完成此操作,那就更聪明了。

最佳答案

DetailView.get_object()返回模型实例而不是查询集。但您可以填充对象的任何属性:

def get_object(self):
object = super(PersonView, self).get_object()
object.num_groups = object.group_set.all().count()
return object

注意 super() 调用中的 PersonView。您应该在此处使用类 View 的名称。

如果您想获得与人员相关的多个计数,那么您可以使用如下方法来实现:

counts = Person.objects.filter(pk=object.pk).aggregate(
num_groups=Count('group_set'), num_items=Count('item_set'))
object.num_groups = counts['num_groups']
object.num_items = counts['num_items']

关于python - 在 Django 的 DetailView 中使用 get_object() 和aggregate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28319737/

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