Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
名称为无效Python标识符的django rest framework ModelSerializer字段_Python_Django_Django Rest Framework - Fatal编程技术网

名称为无效Python标识符的django rest framework ModelSerializer字段

名称为无效Python标识符的django rest framework ModelSerializer字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,如果我有一个序列化程序: class CommentSerializer(serializers.Serializer): email = serializers.EmailField() content = serializers.CharField(max_length=200) 然后,序列化程序返回的字典。数据将具有键“email”和“content” 但我需要包括名称不是有效Python标识符的字段: “类型” “@context” 有一种惯用的方法吗?尝试将Com

如果我有一个序列化程序:

class CommentSerializer(serializers.Serializer):
    email = serializers.EmailField()
    content = serializers.CharField(max_length=200)
然后,
序列化程序返回的字典。数据
将具有键
“email”
“content”

但我需要包括名称不是有效Python标识符的字段:

  • “类型”
  • “@context”

有一种惯用的方法吗?

尝试将
CommentSerializer
中的
方法重写为

class CommentSerializer(serializers.Serializer):
    type = serializers.EmailField()
    content = serializers.CharField(max_length=200)

    def to_representation(self, instance):
        data = super().to_representation(instance)
        return_data = {}
        return_data.update({"type": data['type'], "@context": data['content']})
        return return_data

您可以尝试在get_fields方法中设置它们,然后只使用字符串。这只是用于
列表
检索
,还是这些字段也需要处理写访问(反序列化)?只读访问。谢谢你:我应该说清楚的。
In [2]: mydata = {"type": "myemail@gmail.com","content": "some content"}

In [3]: comment = CommentSerializer(data=mydata)

In [4]: comment.is_valid(True)
Out[4]: True

In [5]: comment.data
Out[5]: {'type': 'myemail@gmail.com', '@context': 'some content'}