django restframework我要更新一个外键怎么处理?
有这么一个model, category是一个外键
class Goods(Model):
name = CharField(max_length=255)
category = ForeignKey(CategoryModel)
然后我用rest framework封装一个接口出去
class GoodsSerializer(Serializers.ModelSerializer):
class Meta:
model = Goods
fields = ('name', 'category')
但当我用http-patch方法,更新category的时候传入参数
{category:2}
这时报错:
{"category":{"non_field_errors":["Invalid data. Expected a dictionary, but got unicode."]}}
传参数:
{category:{id: 2}}
继续报错
The `.update()` method does not support writable nestedfields by default.
查文档,说涉及外键的要自己封闭update方法。好,自己在GoodsSerializer中增加update()方法
def update(self, instance, validated_data):
category = validated_data.get('category', instance.category)
instance.save(category_id=category.id, **validated_data)
但是还是报错,打断点,看到validated_data中的内容如下:
{u'category': OrderedDict()}
category是一个空的OrderedDict。
这是怎么回事呢?
我要是想要更新goods的category,正确的做法应该是怎么呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
估计楼主使用客户端不正确所致
请看看这个错误,并作对比
这是我实验服务器代码地址:https://github.com/uxlsl/shop_test
下面是客户端
假设接口是这样的http://127.0.0.1:8000/goods/{pk}/
使用requests做客户端发送数据
这时就会打印
u'{"non_field_errors":["Invalid data. Expected a dictionary, but got unicode."]}'
修改将json.dumps(data)改成data
打印就会是这个, 成功更新goods的category
{"name":"apple","category":2}