如何解决Django:在 ListView 中显示评分计数
我刚开始学习 django,我正在尝试在 ListView 中显示具有评级数量的产品。但我无法生成预期的输出。
models.py
skl_img = cv2.imread("sample_skeleton_image/579366_2_train2017_skel.png",0)
obj_img = cv2.imread("/content/drive/Shareddrives/Wish 2021/Code/sample_skeleton_image/579366_2_train2017.jpg",cv2.IMREAD_COLOR)
c3_skel = np.zeros_like(obj_img)
c3_skel[:,:,0] = skl_img
c3_skel[:,1] = skl_img
c3_skel[:,2] = skl_img
plt.imshow(c3_skel)
views.py
final_img = cv2.add(obj_img,c3_skel)
plt.imshow(final_img)
模板
class Product(models.Model):
name = models.CharField(max_length=200)
description = models.TextField(max_length=255,default=None)
author = models.ForeignKey(User,on_delete=models.CASCADE)
class Productrating(models.Model):
product = models.ForeignKey(Product,on_delete=models.CASCADE,related_name='product_rating')
user = models.ForeignKey(User,on_delete=models.CASCADE)
stars = models.SmallIntegerField(validators=[MinValueValidator(1),MaxValueValidator(5)])
这会按预期显示名称和平均评分,但会在每个产品旁边放置一个包含所有产品的查询集,如下所示:
class ProductListView(LoginrequiredMixin,ListView):
model = Product
def get_queryset(self):
return Product.objects.annotate(avg_rating=Avg('product_rating__stars')).order_by('-avg_rating')
def get_context_data(self,**kwargs):
data = super(ProductListView,self).get_context_data(**kwargs)
data['product_rating_count'] = Product.objects.annotate(Count('product_rating'))
return data
解决方法
在您的模板中,您可以执行此操作。
{% for product in products %}
{{ product.name }} {{ product.avg_rating }}
Rating count: {{ product.product_rating.all.count }}
{% endfor %}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。