python - ListView 中 M2M 元素的平均值

标签 python django

这是我的模型:

class FruitItem(models.Model):
    vote = models.IntegerField()

class Fruit(models.Model):
   name = models.CharField(max_length=77)
   items = models.ManyToManyField(FruitItem)

这是我的观点:

class LoginRequiredMixin(object):
    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)

class FruitsList(LoginRequiredMixin, ListView):
    template_name = 'fruits.html'
    context_object_name = "fruits"
    paginate_by = "8"

    def get_queryset(self):
        return Fruit.objects.filter(user=self.request.user).annotate(
                            vote_avg=Avg('items__vote'))

和模板:

{% for f in fruits %}
    {{ f.name }}
    {{ f.items.vote_AVERAGE }}
{% endfor %}

如何显示每个列表元素的投票平均值?({{ f.items.vote}})

最佳答案

from django.db.models import Avg

def get_queryset(self):
    return Fruit.objects.filter(user=self.request.user).annotate(
                                vote_avg=Avg('items__vote'))

现在,模板上下文中的每个 Fruit 对象都有一个 vote_avg 属性,其中包含相关 FruitItem.vote 字段的平均值。

关于python - ListView 中 M2M 元素的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22091977/

相关文章:

python - 一个模型 sqlalchemy 中的两个外键重复

python - Django 应用程序中的线程

python - 如何在Python中使用zip和map编写csv文件?

python - 根据请求动态选择数据库

python - 是否有用于变量检查和赋值的 Python 快捷方式?

django - 如何限制仅在登录时显示消息

javascript - 在 Masonry 中使用 Django 无限分页

Python:.upper 后打印值

python - 如何从列表中的字符串末尾去除特定标点符号并使所有单词小写

django - 管理站点将字母 "s"附加到 Django 上每个模型\表名称的末尾