django-parler翻译为抽象模型

时间:2017-10-30 18:09:26

标签: python django django-parler

我的django应用程序也必须是可翻译的静态页面和模型。对于翻译模型我正在使用django-parler app。这很好,但对于简单模型,我的意思是,模型不是从抽象模型类继承的。

假设我们有一个车辆抽象模型

class Vehicle(TranslatableModel):

    translations = TranslatedFields(
        description=models.CharField(max_length=100)
    )

    class Meta:
        abstract = True

和一个儿童模特是Car:

class Car(Vehicle)
    """..."""

这引发了我的错误: TypeError:无法为抽象类Vehicle创建TranslatedFieldsModel

我还想使用django模型继承。那么,我可以做什么来使用django-parler翻译我的模型,它支持抽象模型的翻译,或者我需要使用另一个应用程序来实现这一点,在这种情况下是否有任何建议?

2 个答案:

答案 0 :(得分:0)

问题是,parler隐式地为翻译创建了一个额外的db表,该表具有ForeignKey模型,用于声明翻译的字段。您不能将FK用于抽象模型,因为它没有自己的db表。如果你有两个模型继承这个抽象模型怎么办?哪个表是FK指向的翻译表?

如果您想在模型之间共享相同的可翻译字段并且仍然相对干燥,您可以尝试在模型之外实现可翻译字段:

vehicle_translations = TranslatedFields(
    description=models.CharField(max_length=100)
)

class Car(TranslatableModel):
    translations = vehicle_translations

答案 1 :(得分:0)

最好的解决方案是按照文档https://django-parler.readthedocs.io/en/latest/api/parler.fields.html#the-translatedfield-class

中的说明使用TranslatedField