Например, у меня есть следующая модель:
Код: Выделить всё
class Product(models.Model):
description = models.CharField(max_length=200)
sku = models.CharField(unique=True, null=False, max_length=30)
price = models.DecimalField(max_digits=8, decimal_places=2)
Код: Выделить всё
class ProductTranslationOptions(TranslationOptions):
fields = ('description', 'sku')
translator.register(Product, ProductTranslationOptions)
Код: Выделить всё
gettext = lambda s: s
LANGUAGES = (
('en', gettext('English')),
('de', gettext('German')),
)
MODELTRANSLATION_LANGUAGES = ('en', 'de')
MODELTRANSLATION_DEFAULT_LANGUAGE = 'en'
MODELTRANSLATION_FALLBACK_LANGUAGES = ('en',)
Код: Выделить всё
Product.objects.create(description_en='product en', description_de='product de', sku_en='sku-001', sku_de='sku-002', price=10.0)
Код: Выделить всё
Product.objects.filter(sku='sku-002')
Только следующий код возвращает правильный экземпляр продукта.
Код: Выделить всё
Product.objects.filter(sku_de='sku-002')
Код: Выделить всё
from django.utils import translation
translation.activate('de')
Product.objects.filter(sku='sku-002')
Решением может быть перебор всех ЯЗЫКОВ и попытка найти экземпляр для каждого языка:
Код: Выделить всё
from django.conf import settings
LANGUAGES = list(getattr(settings,
'MODELTRANSLATION_LANGUAGES',
(l[0] for l in settings.LANGUAGES)))
def find_product_by_sku(sku):
for language in LANGUAGES:
product = Product.objects.filter(**{"sku_{}".format(language): sku})
if product:
return product
Подробнее здесь: https://stackoverflow.com/questions/590 ... ranslation
Мобильная версия