2013-04-05 157 views
0

我想要做到這一點:django模型數據庫中的最後一條記錄

我有一個位置評級記錄表。在這張表中,一個地點也可以有多個評分。但我想限制只搜索到相同位置的最後一個記錄。例如:

一個位置與id = 1有3個等級分數:1,2,4,現在當用戶評價得分searchs 2,這個位置應該出現,因爲它的最後一個記錄是4

編輯
有兩個表(Django模型):位置和等級。

我可以做到這一點:

all_locations = Location.objects.all() 

然後在模板。 locations_rating是評級表中的外鍵locationID的相關名稱。

{% for location in all_locations %} 
    {{ location.locations_rating }} 
{% endfor %} 
+1

是什麼你的模特? – Ngenator 2013-04-05 03:00:57

回答

2

models.py

class Location(models.Model): 
    locationname = models.CharField(max_length=100) 

    def __unicode__(self): 
     return self.locationname 

    def latest(self): 
     return Rating.objects.values('rating').filter(von_location=self).order_by('-id')[0] 

class Rating(models.Model): 
    von_location = models.ForeignKey(Location,related_name="locations_rate") 
    rating = models.IntegerField() 

    def __unicode__(self): 
     return "{0}".format(self.rating) 

views.py

all_locs = Location.objects.all() 

模板

{% for location in all_locs %} 
    {{ location.locationname }} - {{ location.latest.rating }}<br/> 
{% endfor %} 
+0

所以我不需要評論中的related_name,對吧? – doniyor 2013-04-05 05:27:14

+0

取決於您,您可以在值中添加該名稱以便您可以訪問它 – catherine 2013-04-05 09:55:33

1

這是純粹的猜測,但你能做這樣的事情嗎?

Rating.objects.filter(location_id=1).order_by(id).reverse()[0] 
+0

讓我試試,謝謝:) – doniyor 2013-04-05 02:36:36

+0

這應該是').order_by(' - id')[0]'。可能還需要包裝在一個嘗試/抓住的情況下,計數是0 – Hamish 2013-04-05 02:38:12

+0

@Hamish,yeaaah,試/抓是非常重要的。但order_by也會給出2。 – doniyor 2013-04-05 02:46:29

1

啊,我誤解了這個問題。這裏有一個不是很有效的方式做到你的要求:

locations = Location.objects.all(); 
filtered = [] 
for location in locations: 
    try: 
     r = Rating.objects.filter(location=location).order_by(-id).[0] 
     if r.rating = 2: 
     filtered.append(location) 
    except Exception as ex: 
     pass 
+0

請參閱我的第二個編輯問題。 – doniyor 2013-04-05 03:02:01

相關問題