2016-07-27 2 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') 

мысль была бы неплохо просто аннотировать СМО с необходимым текстом, однако мне не удалось найти, как пояснение значения поля. Что-то вроде

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

Другой подход будет использовать шаблон фильтра, как

item.description|choose_lang:request 

но сортировка СМО перед шаблон кажется аккуратнее.

ответ

7

Здесь вы можете использовать выражение F().

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

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

+0

Спасибо. Я сам пробовал эти вещи, но оказалось, что я ошибся в другом месте кода, и когда он потерпел неудачу, я понял, что у меня есть эти инструкции F неправильно :) Теперь все работает нормально. –

Смежные вопросы