0

一旦用户点击给定的产品名称,我就会尝试返回相关的评论。我正在使用的视图是:

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

列出的每个产品名称都有多个评论;我遇到的问题是链接()没有返回 website.id。关于如何解决这个问题的任何建议?

4

2 回答 2

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})
于 2012-06-20T04:59:16.877 回答
1

你的模型结构不太合适。您真正需要的是评论和产品的单独表格,然后是ForeignKey从评论到产品的表格,以便它们处于一对多关系。然后,您可以轻松获得每个不同的产品,并遍历每个产品的评论。

于 2012-06-20T08:18:10.513 回答