列表视图中的 GenericForeignKey 对象
GenericForeignKey objects in list view
我正在使用第三方应用程序 (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)
如何return每个商店的评论?
编辑:我应该指出我想在不使用 django-review 中的模板标签的情况下做到这一点。
django-review
使用 Django 的 contenttypes
and generic 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 %}
我正在使用第三方应用程序 (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)
如何return每个商店的评论?
编辑:我应该指出我想在不使用 django-review 中的模板标签的情况下做到这一点。
django-review
使用 Django 的 contenttypes
and generic 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 %}