Django的REST框架 - 通过JSON
我想创建一个API,允许通过POST请求发送JSON OneToOne关系。然后 的JSON应该得到转嫁到串行这需要创建一个新的对象,并与现有的数据来填充它的照顾。Django的REST框架 - 通过JSON
它适用于'简单'的情况,比如像用户名和类似的基本字符输入,但我在创建OneToOne关系时遇到了严重的困难。这里是示例代码。
函数employee_list
在views.py
- data['account']
是一个有效的用户名,User
实例被成功选中!
data = JSONParser().parse(request)
user_object = User.objects.get(username=data['account'])
data['account'] = user_object # this is now a valid User object
serializer = EmployeeSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
模型
class Employee(models.Model)
id = models.AutoField(primary_key=True)
name = models.CharField(...)
surname = models.CharField...
account = models.OneToOneField(User)
role = ...
salary = ...
picture = ...
和串行
class EmployeeSerializer(serializers.ModelSerializer):
class Meta:
model = Employee
fields = (...) # all fields of the `Employee` model
到目前为止好,但是,从来没有串行验证!当我删除需要一个OneToOne关系,它的工作原理..
我怎样才能创建一个工作OneToOne关系到用户对象的新Employee对象?
在此先感谢。
您需要通过User
对象的pk
,而不是User
对象。
解决方案:
data['account'] = user_object.pk
是的,已经做过了。完美的作品。 – fweidemann14
的问题是因为用户对象被传递到串行化器,当它可刚刚通过串行化器,同时节省的对象。尝试是这样的:
data = JSONParser().parse(request)
user_object = User.objects.get(username=data['account'])
serializer = EmployeeSerializer(data=data)
if serializer.is_valid():
# pass object to save, instead of saving in the data dictionary
serializer.save(account=user_object)
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
是的,试过为好,然后我看到了,我可以只使用主键来代替,这是比较容易的方式。无论如何Upvoted,也许这是帮助别人。 ;) – fweidemann14
什么是验证错误?你可以在里面通过raise_exception:is_valid(raise_exception = TRUE) – arjun27
谢谢你的提示,甚至不知道这是可能的。它给了我确切的错误,因为这个,我能够独自解决它。非常感谢! – fweidemann14