[英]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.