列表视图中的GenericForeignKey对象

时间:2016-07-03 16:31:50

标签: python django generic-foreign-key

我正在使用第三方应用(https://github.com/bitmazk/django-review)通过通用外键为我的模型生成评论。

class Store(models.Model):
    bio = models.CharField(max_length=255, null=True, blank=True)
    full_name = models.CharField(max_length=100, blank=True, null=True)
    username = models.CharField(max_length=100, unique=True)

    website = models.URLField(null=True, blank=True)
    phone = models.CharField(null=True, blank=True, max_length=12)
    whatsapp = models.CharField(null=True, blank=True, max_length=12)

观点:

def store_list(request):
    stores = Store.objects.all()
    context['stores'] = stores
    return render(request, 'store_list.html', context)

如何退回每家商店的评论?

编辑:我应该指出,我想在不使用django-review的模板标签的情况下这样做。

1 个答案:

答案 0 :(得分:0)

django-review使用Django'} contenttypesgeneric foreign keys为您自己的应用程序之外的评论创建数据库记录。为了指定要查看的对象,模块通过URL传递要查看的对象pk的模型名称和整数。

所以,在你的模板中,创建一个" Review This Item"按钮需要对象本身的型号名称和ID。这就是通用外键的实现方式。

{% for store in stores %}
    <a href="{% url "review_create" content_type='store' object_id=store.pk %}">
        Review our {{ store.name }} store
    </a>
{% endfor %}

要检索评论,请使用附带的模板标记,django-review执行查找。看看下面的内容,它就是您所需要的:

{% load review_tags %}

{% for store in stores %}
    {% get_reviews store as reviews %}
    {% for review in reviews|slice:"0:3" %} {# get the first three reviews #}
        <p>
            {{ review.get_average_rating }} 
        </p>
        <p>
            {% if review.content %}
                {{ review.content|truncatewords:'70' }}
            {% else %}
                Reviewed without description.
            {% endif %}
        </div>
        <a href="{% url "review_detail" pk=object.pk %}">Review details</a>
    {% endfor %}
{% endfor %}