django restframework我要更新一个外键怎么处理?
澳门博彩导航网址
澳门博彩导航网址
当前位置 : 澳门博彩导航网址 > 澳门博彩导航网址大全

django restframework我要更新一个外键怎么处理?

有这么一个model, category是一个外键

class GoodsModel:
    name = CharFieldmax_length=255
    category = ForeignKeyCategoryModel

然后我用rest framework封装一个接口出去

class GoodsSerializerSerializers.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 updateself, instance, validated_data:
        category = validated_data.getcategory, instance.category
        instance.savecategory_id=category.id, **validated_data

但是还是报错,打断点,看到validated_data中的内容如下:

{ucategory: OrderedDict}

category是一个空的OrderedDict。
这是怎么回事呢?

我要是想要更新goods的category,正确的做法应该是怎么呢?

估计楼主使用客户端不正确所致
请看看这个错误,并作对比
这是我实验服务器代码地址:https://github.com/uxlsl/shop_test
下面是客户端
假设接口是这样的http://127.0.0.1:8000/goods/{pk}/
使用requests做客户端发送数据

import json
import requests
data={category: 2}
r = requests.patchhttp://127.0.0.1:8000/goods/1/, json=json.dumpsdata

printr.text

这时就会打印
u{"non_field_errors":["Invalid data. Expected a dictionary, but got unicode."]}

修改将json.dumpsdata改成data

打印就会是这个, 成功更新goods的category
{"name":"apple","category":2}

广告位

澳门博彩导航网址