我尝试在用户点击给定的产品名称后返回相关评论。我使用的观点是:
def index(request):
prod_list = Website.objects.values('productname').distinct()
return render_to_response('reserve/templates/index.html', {'prod_list': prod_list})
我的模板是:
{% for website in prod_list %}
<a href="/clubs/{{ website.id }}/detail">{{ website.productname }}</a>
<br>{{ website.review }} <br><br>
{% endfor %}
我使用的模型是:
class Website(models.Model):
productname = models.CharField('Website name', max_length = 100)
review = models.CharField('Review', max_length = 200)
def __unicode__(self):
return self.productname
列出的每个产品名称都有多个评论;我遇到的问题是link()没有返回website.id。关于如何解决这个问题的任何建议?
答案 0 :(得分:1)
值
值(*字段)
返回一个ValuesQuerySet - 一个返回的QuerySet子类 用作可迭代的字典而不是模型实例 对象。
所以你实际上迭代的是字典对象。
其次,限制值字段时,仅返回这些字段。 prod_list
实际上是:
[{'productname': u'Product Name 1'},{'productname': u'Product Name 2'}, ...]
将视图更新为此prod_list = Website.objects.distinct('productname')
会使您的模板正确呈现,因为它会返回一个查询集。
由于DISTINCT ON
仅支持postgresql,因此您可以使用此方法:
from django.shortcuts import render
# ... your other imports
def index(request):
prod_list_distinct = set()
for obj in Website.objects.all():
prod_list_distinct.add(obj.productname) # sets only allow uniques
prod_list = Website.objects.filter(productname__in=prod_list_distinct)
return render(request,
'reserve/templates/index.html', {'prod_list': prod_list})
答案 1 :(得分:1)
您的模型结构并不合适。您真正需要的是评论和产品的单独表格,然后是从评论到产品的ForeignKey
,以便它们处于一对多的关系中。然后,您可以轻松获取每个不同的产品,并遍历每个产品的评论。