Переводы 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
Другие вопросы по тегам