django-rest-framework-datatables 和 Django Parler 的翻译字段
Posted
技术标签:
【中文标题】django-rest-framework-datatables 和 Django Parler 的翻译字段【英文标题】:django-rest-framework-datatables and Django Parler's translation field 【发布时间】:2019-08-10 06:01:16 【问题描述】:我有带有翻译字段的模型。
class Device(TranslatableModel):
translations = TranslatedFields(name=models.CharField(max_length=100))
我做了一个像这样的序列化器:
class DeviceSerializer(TranslatableModelSerializer):
translations = TranslatedFieldsField(shared_model=Device)
class Meta:
model = Device
fields = ('translations',)
它给了我应有的漂亮 JSON。
"count": 1,
"next": null,
"previous": null,
"results": [
"device":
"translations":
"en":
"name": "Sample Device"
]
现在我想将它与 django-rest-framework 一起使用。在我的模板中,我编写了如下脚本:
$('#devices').DataTable(
'serverSide': true,
'ajax': 'api/devices/?format=datatables',
'columns': [
'data':'device.translations.en'
它拒绝与我合作。我收到 django.core.exceptions.FieldError: Unsupported lookup 'en' for AutoField or join on the field not allowed。 如果我没有将 .en 附加到 'data' 它当然会给出 Object.object。
【问题讨论】:
【参考方案1】:问题出在模板文件中。
将名称和数据字段分别传递给数据表配置中的列
请将field_name
替换为您的模型字段名称
$('#devices').DataTable(
'ajax': 'api/devices/?format=datatables',
'columns': [
"data": "translations.en.field_name" , "name": "translations.field_name",
]
);
更多详情请参考django-rest-framework-datatables
&Django-parler-rest
实际的问题是,在向服务器发出 get 请求时 数据表将在列参数中添加名称值,所以
而不是写
“名称”:“translations.en.field_name”
写下来:
“名称”:“translations.field_name”
删除语言代码
【讨论】:
以上是关于django-rest-framework-datatables 和 Django Parler 的翻译字段的主要内容,如果未能解决你的问题,请参考以下文章