2011-05-24 26 views
6

我的模型:ORDER_BY()不與Django的視圖過濾器()工作

... 
class Bild(models.Model): 
    album = models.ForeignKey(Album) 
    slot = models.IntegerField() 
    bild = models.ImageField(upload_to='bilder', null=True) 
    untertitel = models.CharField(max_length=200, null=True) 
    def __unicode__(self): 

我的觀點:

def album_bild(request, album_id, bild_id): 
    album_id = int(album_id) 
    bilder = Bild.objects.filter(album__id = album_id).order_by('slot') 
    .... 

當我通過模板 「BILDER」 迭代,我可以看到過濾器()確實工作,但對象仍然由pk而不是「槽」排序。

使用filter()和order_by()會出現問題嗎?

編輯:我想我應該補充說,一切工作正常在外殼。所以也許錯誤是在模板中...?

{% for bild in bilder %} 
    <li 
    {% ifequal bild.slot bild_id %} 
      class="active" 
    {% endifequal %} 
    onclick="window.location.href='/portfolio/{{ album_id }}/{{ bild.slot }}'"><div>{{ bild.slot }}</div></li> 
{% endfor %} 

{% for i in empties %} 
    <li class="empty"></li> 
{% endfor %} 
+0

你不會做這樣的事情bilder.order_by(...)某處後在你看來,是嗎? – 2011-05-24 17:59:45

+0

在將模板發送給模板之前,您是否正在做任何事情? – 2011-05-24 18:00:14

+0

我現在正在做一個項目中的相同類型的過濾器和order_by,語法與我所擁有的相同,但是我的作品...我會玩一下我的shell並嘗試弄清楚這一點 – 2011-05-24 18:05:07

回答

11

我已經做了很多.filter().order_by()鏈就像你有他們那裏,並沒有跳出我作爲格格不入。我從來沒有嘗試將這個順序傳遞給模板,但沒有進一步處理對象(通常遍歷它們),所以我不知道order_by()是否作爲django懶惰評估的一部分而丟失?也許嘗試在list()中包裝filter().order_by()行來強制評估,而不是在稍後時間推遲評估。

bilder = list(Bild.objects.filter(album__id = album_id).order_by('slot')) 

這是一個在黑暗中拍攝,但速度很快,值得一試。

+0

謝謝您的建議!可悲的是,這不是。我認爲通過不將所有數據都提供給模板可以避免這個問題。在我的情況下,無論如何這可能是無效的。但我仍然好奇... – bentm 2011-05-24 20:15:22

+0

哦,對不起。它實際上工作!真的謝謝你!使用list()做了訣竅! (雖然我仍然不明白爲什麼...) – bentm 2011-05-24 20:27:25

+1

我認爲沒有評估QuerySets有點... – osa 2014-09-13 14:41:22

2

您應該嘗試通過slot__id進行訂購。

像這樣:

bilder = Bild.objects.filter(album__id = album_id).order_by('slot__id')