3

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

假设我们有一个 Vehicle 抽象模型

class Vehicle(TranslatableModel):

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

    class Meta:
        abstract = True

和一个子模型是汽车:

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

这引发了我这个错误:TypeError: Can't create TranslatedFieldsModel for abstract class Vehicle

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

4

2 回答 2

0

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

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

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

class Car(TranslatableModel):
    translations = vehicle_translations
于 2017-10-30T18:23:50.583 回答
0

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

于 2019-05-08T16:27:08.057 回答