Переводы django-parler для абстрактной модели
Мое приложение django должно быть переводимым, статические страницы и модели тоже. Для перевода моделей я использую приложение django-parler. Это хорошо работает, но для простых моделей, я имею в виду модели, которые не наследуются от класса абстрактных моделей.
Допустим, у нас есть абстрактная модель автомобиля
class Vehicle(TranslatableModel):
translations = TranslatedFields(
description=models.CharField(max_length=100)
)
class Meta:
abstract = True
и детская модель, которая является Автомобилем:
class Car(Vehicle)
"""..."""
Это вызвало у меня эту ошибку: TypeError: Невозможно создать TranslatedFieldsModel для абстрактного класса Vehicle.
Я хотел бы все еще использовать наследование модели Django. Итак, что я могу сделать для перевода моих моделей с использованием django-parler, он поддерживает переводы для абстрактных моделей, или мне нужно будет использовать другое приложение для достижения этой цели, в таком случае какое-либо предложение по любому?
1 ответ
Лучшее решение - использовать TranslatedField
как описано в документации: https://django-parler.readthedocs.io/en/latest/api/parler.fields.html
Проблема в том, что parler неявно создает дополнительную таблицу БД для переводов, которая имеет ForeignKey
к модели, на которой объявлены переведенные поля. Вы не можете иметь FK для абстрактной модели, потому что у нее нет собственной таблицы БД. Что если у вас есть две модели, подклассифицирующие эту абстрактную модель? На какую таблицу указывает FK таблицы перевода?
Вы можете попытаться реализовать переводимые поля вне вашей модели, если вы хотите использовать одни и те же переводимые поля в разных моделях и при этом быть относительно СУХИМЫМИ:
vehicle_translations = TranslatedFields(
description=models.CharField(max_length=100)
)
class Car(TranslatableModel):
translations = vehicle_translations