2016-07-03 13 views
1

Ich verwende eine Drittanbieter-App (https://github.com/bitmazk/django-review), um Bewertungen für mein Modell über einen generischen Fremdschlüssel zu generieren.GenericForeignKey-Objekte in der Listenansicht

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) 

Aussicht:

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

Wie kehre ich die Bewertungen für jeden Laden?

Edit: Ich sollte darauf hinweisen, dass ich das tun möchte, ohne Template-Tags von Django-Review zu verwenden.

Antwort

0

django-review verwendet Djangos contenttypes und generic foreign keys zum Erstellen von Datenbankdatensätzen für Bewertungen außerhalb Ihrer eigenen Anwendungen. Um ein Objekt zur Überprüfung zu bestimmen, übergibt das Modul den Modellnamen und die Ganzzahl des zu überprüfenden Objekts pk durch eine URL.

In Ihrer Vorlage erfordert das Erstellen einer Schaltfläche "Diesen Artikel überprüfen" den Modellnamen und die ID des Objekts. So kann der generische Fremdschlüssel implementiert werden.

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

Um Bewertungen abzurufen, verwenden Sie die mitgelieferten Vorlagen-Tags und django-review führt die Lookups. Werfen Sie einen Blick darauf, es ist alles, was Sie brauchen:

{% 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

Vielen Dank, aber ich möchte auch die Bewertungen abrufen, ohne die Vorlage Tags verwenden. – fahadalmutairi

+0

Wenn Sie sich die Quelle für get_reviews ansehen, sehen Sie genau, wie Sie das tun –

Verwandte Themen