2016-07-03 27 views
1

我正在使用第三方應用程序(https://github.com/bitmazk/django-review)通過通用外鍵爲我的模型生成評論。列表視圖中的GenericForeignKey對象

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的模板標籤。

回答

0

django-review使用Django的contenttypesgeneric foreign keys來爲您自己的應用程序以外的評論創建數據庫記錄。爲了指定一個對象進行審閱,模塊傳遞模型名稱和對象pk的整數以通過url進行審閱。

因此,在您的模板中,創建「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 %} 
+0

謝謝,但我也想檢索評論,而不使用模板標籤。 – fahadalmutairi

+0

如果你看看get_reviews的來源,你會看到如何做到這一點 –