我的python代码有一个名为field_name
的字段,对于python来说很好,并且与Django配合得很好。
许多Javascript linters希望你让它成为fieldName,或者他们会对你抱怨很多。
试图在两者之间找到一个很好的共同点,我写了像
这样的序列化器class MySerializer(serializers.ModelSerializer):
fieldName = serializers.WritableField(source='field_name', required=True)
class Meta:
model = Widget
exclude = ('field_name',)
问题是这不会用fieldName替换field_name的外部表示,它同时发送fieldName和field_name。所以我告诉它排除('field_name')。然后,当您尝试保存时,它会变得非常沮丧,因为field_name不存在,或者fieldName不是该对象的成员。
我原以为映射是一种很好的方法,但事实并非如此。有没有办法从python映射名称 - > javascript所以代码在两端都看起来很漂亮?
答案 0 :(得分:3)
找到一个在json级别处理它的包:
https://pypi.python.org/pypi/djangorestframework-camel-case/0.1.0
文档非常稀疏,但它似乎有效,并且集成它很简单(这可能解释了稀疏的文档)。
答案 1 :(得分:2)
您的代码应该正常工作。所以示例中缺少一些东西
想到的是你的fields
值 - 你在那里指定了什么?通常最好明确指定你想要的字段,而不是使用exclude
- 设置(可能)需要更长的时间,但从长远来看,这将节省时间。
如果fieldName
中包含fields
而field_name
不包含fieldName
,我希望您的代码能够正常运行。
(如果不能解决它,可能会显示更多。)
修改后更新
确定。是。您应该指定所需的字段。您的field_name
充当额外字段,其来源为{{1}} - 例如,当使用SerializerMethodField时,这种情况非常有用。
更新:额外解决方案
有一个ticket asking about Camel-casing field names for better compatibility with e.g. JavaScript clients。这链接到Gist with a working solution via custom renderer and parser classes。