2016-07-03 3 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's contenttypes и generic foreign keys для создания записей базы данных для отзывов вне ваших собственных приложений. Чтобы назначить объект для проверки, модуль передает имя модели и целое число объекта pk для просмотра через URL-адрес.

Итак, в вашем шаблоне для создания кнопки «Обзор этого элемента» требуется имя модели и идентификатор самого объекта. Вот как можно реализовать общий внешний ключ.

{% 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, вы точно увидите, как это сделать –