【发布时间】:2018-10-15 23:45:27
【问题描述】:
当我为 ManyToMany 字段添加序列化程序时,它会在 REST API 上显示结果,但是当我发布数据时,序列化程序会将 is_valid() 设为 false。 当我将它们称为 JSONFields 时,序列化程序 is_valid() 为 True 并且数据被保存,但在 localhost 上查看 api 时出现以下错误 - 'ManyRelatedManager' 类型的对象不是 JSON 可序列化的'
class B(models.model):
name = models.CharField()
class A(models.model):
b = models.ManyToManyField(B)
class BSerializer(serializer.modelSerializer):
class Meta:
model=B
fields = '__all__'
class ASerializer(serializer.ModelSerializer):
b = BSerializer(many=true)
def save(self):
b_data = self.validated_data.pop('b')
a = A.objects.create(**validated_data)
b_instance = B.objects.get(name=b_data['name'])
a.add(b_instance)
当使用http://localhost:8000/a/REST 命中时,这在 REST 框架 UI 上提供了完美的结果,但是当我使用数据 {'b':[{'name':'foo'}]} 在邮递员上命中 POST 请求时,序列化程序失败到 is_valid() 函数。
但是当我把代码改成这样的时候:
class ASerializer(serializer.ModelSerializer):
b = serializer.JSONField()
def save(self):
b_data = self.validated_data.pop('b')
a = A.objects.create(**validated_data)
b_instance = B.objects.get(name=b_data['name'])
a.add(b_instance)
邮递员命中保存了 A 的数据,然后将 b 实例添加到其中。当我在 python shell 中看到数据时可以看到。但是在 REST Framework UI 上查看它时,会出现以下错误: 'ManyRelatedManager' 类型的对象不是 JSON 可序列化的'
【问题讨论】:
标签: django python-3.x django-rest-framework django-2.0