2016-07-27 81 views
1

多語言網站,翻譯存儲在一個表的列中。 需要將查詢集合傳遞給已經過濾翻譯的模板。 語言變量存儲在會話中。使用字段值註釋查詢集

class Item(models.Model): 
    name = models.CharField(max_length=128) 
    description = models.ForeignKey(Localization) 

class Localization(models.Model): 
    klingon = models.TextField(blank=True, null=True, verbose_name='klingon') 
    english = models.TextField(blank=True, null=True, verbose_name='english') 

思想將是很好只是標註與所需要的文字了QS,但是我沒有找到如何與一個字段值標註。像

item = Item.objects.all().annotate(text=description.klingon) 

另一種方法的東西是使用模板過濾器像

item.description|choose_lang:request 

但排序QS模板看起來更整潔了。

回答

7

您可以在這裏使用F()表達式。

from django.db.models import F  
item = Item.objects.all().annotate(text=F('description__klingon')) 

文檔:https://docs.djangoproject.com/en/1.9/ref/models/expressions/#using-f-with-annotations

+0

謝謝。我自己嘗試了這些F的東西,但事實證明,我在代碼的不同地方犯了一個錯誤,當它失敗時我認爲我有這個F指令錯誤:)現在一切正常。 –