在我的测试中,我发送了我通过序列化程序传递的模型的模拟数据。 serializer.data
看起来像这样
{
"field": None
}
但是,我的API收到的数据格式为
{
"field": "None"
}
这是一个问题,因为我试图指定允许为空的外键。不应该APIClient
将None转换为null而不是unicode吗?
有没有办法解决这个问题或绕过它?
这是我的序列化工具
class MyModelSerializer(serializers.ModelSerializer):
field = serializers.PrimaryKeyRelatedField(
queryset=OtherModel.objects.all(), required=False, allow_null=True)
我在视图集中创建方法
def create(self, request):
model = MyModel()
serializer = MyModelSerializer(model, data=request.data)
if serializer.is_valid():
serializer.save(owner=request.user)
return Response(serializer.data, status=201)
return Response(serializer.errors, status=406)
我的模特课
class MyModel(models.Model):
field= models.OneToOneField(
OtherModel, blank=True, null=True)
答案 0 :(得分:3)
此处的问题是APIClient
默认情况下将数据作为表单数据发送到视图,该数据没有None
或null
的概念,因此它是转换为unicode字符串None
。
好消息是,由于这个原因,Django REST框架将coerce a blank string to None
用于关系字段。或者,您可以使用JSON并实际发送None
或null
,这应该没有问题。
答案 1 :(得分:0)
除了Kevin已经说过的内容之外,您还可以强制APIClient使用参数format='json'
发送JSON。
请参阅documentation。
答案 2 :(得分:0)
除现有答案外, 如果您期望null,这可能意味着您希望您的api接收json。
如果是这种情况,您可能希望将测试请求默认格式配置为json而不是form-data:
在你的setting.py中:
format='json'
这样,无需为每个请求添加{{1}}