这是我的模型:
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/