2014-05-10 98 views
0

我正在構建一個網站,用戶可以上傳漢堡評論。他們還可以根據一些標準對漢堡進行評分。然後,我想通過評論信息爲每個漢堡店製作一個目標網頁。我認爲我的模型正確,但我無法查詢數據庫。Django:無法設置多對一模型

我的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 %} 

回答

0

如果你想顯示目標網頁上的評論,你已經知道的地方對象。所以,你可以做這樣的事情:

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

現在你有評論可以在HTML頁面上呈現的一個QuerySet

編輯:

有計算平均得分的多種方式。要麼你能做到這一點的應用程序或數據庫:

在應用:

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')) 
+0

如果我要顯示在主頁上的平均包子評級旁邊的地方?我怎樣才能對與每個地方相關的評論數據進行計算? – user1410712

+0

更新了答案看看! –

+0

當你說「在數據庫」,你的意思是在地方模式?而在應用程序是在我的索引視圖? – user1410712