【问题标题】:GenericForeignKey objects in list view列表视图中的 GenericForeignKey 对象
【发布时间】:2016-07-03 16:31:49
【问题描述】:

我正在使用第三方应用 (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 的模板标签的情况下这样做。

【问题讨论】:

    标签: python django generic-foreign-key


    【解决方案1】:

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

    因此,在您的模板中,创建“查看此项目”按钮需要对象本身的模型名称和 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 %}
    

    【讨论】:

    • 谢谢,但我也想在不使用模板标签的情况下检索评论。
    • 如果您查看 get_reviews 的源代码,您将确切了解如何做到这一点
    猜你喜欢
    • 2021-10-23
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2012-09-10
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多