簡體   English   中英

Django:無法建立多對一模型

[英]Django: Having trouble setting up Many-To-One model

我正在建立一個用戶可以在其中上傳漢堡評論的網站。 他們還可以根據許多標准對漢堡進行評分。 然后,我想使用評論中的信息為每個漢堡店制作一個登陸頁面。 我想我已經建立了正確的模型,但是查詢數據庫時遇到了麻煩。

我的models.py是:

from django.db import models
from datetime import datetime

class Place(models.Model):
    name = models.CharField(max_length=300, unique = True)

    def __unicode__(self):
        return self.name

class Review(models.Model):
    RATINGS = (
    (1, '1'),
    (2, '2'),
    (3, '3'),
    (4, '4'),
    (5, '5'),
    )

    place = models.ForeignKey(Place)
    burger = models.CharField(max_length=150)
    date = models.DateField(default = datetime.now)
    bun = models.IntegerField(max_length=1, choices=RATINGS)
    toppings = models.IntegerField(max_length=1, choices=RATINGS)
    meat = models.IntegerField(max_length=1, choices=RATINGS)
    comments = models.TextField(max_length=2000)
    #photo = models.ImageField(upload_to='', blank=True)

    def __unicode__(self):
        return self.burger

因此,現在我想使用每個評論中的信息為每個漢堡店創建一個登陸頁面。 就像“這里的小圓面包平均評分為5”。 如何查詢所有評論並在頁面上獲得類似信息? 我能夠建立一個簡單的登錄頁面,其中列出了有關該地點的評論數量,但我不知道該怎么做。

views.py:

def index(request):

    context = RequestContext(request)

    place_list = Place.objects.all()

    context_dict = {'places': place_list}

    return render_to_response('index.html', context_dict, context)

index.html模板:

{% for place in places %}
<li><a href="/burgers/place/{{ place.url }}">{{ place.name }}</a> | {{place.review_set.count}}</li>

{% endfor %}

如果要在登錄頁面上顯示評論,則已經知道該放置對象。 因此,您可以執行以下操作:

place = Place.objects.get(name=place_to_land)
reviews = Review.objects.filter(place=place)

現在,您有了一個可以在html頁面上呈現的評論的查詢集

編輯:

有多種計算平均評分的方法。 您可以在應用程序中或在數據庫中執行以下操作:

在應用程式中:

count, rating = 0, 0
for review in reviews:
    count += 1
    rating += review.bun
if count:
   av_rating = rating/count

在DB:

reviews = Review.objects.filter(place=place).aggregate(Avg('bun'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM