Python django rest框架提示:";类型错误:需要一个主键,但得到一个‘;dict’&引用;

Python django rest框架提示:";类型错误:需要一个主键,但得到一个‘;dict’&引用;,python,django,vue.js,django-rest-framework,Python,Django,Vue.js,Django Rest Framework,这些问题困扰了我好几天。我已经用django rest framwork设置了一个程序。“vue.js”中的前端程序。当“修补”前端中的数据时,服务器显示“400”。chrome的“console.log”函数显示“type error:需要主键,但需要dict”。 详情如下: views.py models.py 序列化程序.py 以下是前端代码的一部分: menuConfig.vue api.js export const submitmenu = (user_id, params) =&g

这些问题困扰了我好几天。我已经用django rest framwork设置了一个程序。“vue.js”中的前端程序。当“修补”前端中的数据时,服务器显示“400”。chrome的“console.log”函数显示“type error:需要主键,但需要dict”。 详情如下:

views.py

models.py

序列化程序.py

以下是前端代码的一部分:

menuConfig.vue

api.js

export const submitmenu = (user_id, params) => {
return axios.patch(`${host}/menudetail/`+user_id+'/', params)
}

export const getMenuDetail  = () => {
return axios.get(`${host}/menudetail/`)
}
提交菜单时,chrome会显示以下错误,这意味着“类型错误:需要主键,但得到命令。”

它表示请求不正确,这意味着您正在尝试发出修补程序请求,但在后端,您需要另一种类型的请求。如果在后端,您有相同类型的请求,请尝试清除chrome的缓存并重新加载服务器。但如何修补正确的请求?当我请求“getMenuInfo”时,服务器响应正确。我将response.data带到this.req,然后更改this.req的数据。this.req的数据类型没有改变,最后我用this.req修补请求,然后出现错误。我犯了什么错误?
class MenuInfo(models.Model):

user = models.ForeignKey(User, verbose_name="用户")
app_id = models.CharField(default="", max_length=30, verbose_name="app_id", help_text="app_id")
note = models.TextField(default="", verbose_name="备注", help_text="备注")
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

class Meta:
    verbose_name = "菜单信息"
    verbose_name_plural = verbose_name

def __str__(self):
    return self.user.username


class Button(models.Model):

name = models.CharField(default="", max_length=20, null=True, blank=True, verbose_name="菜单名称",
                        help_text="菜单名称")
menuinfo = models.ForeignKey(MenuInfo, related_name='button', blank=True, verbose_name="menuinfo")
type = models.CharField(default="view", max_length=100, null=True, blank=True, verbose_name="菜单类型", help_text="菜单类型")
data = models.CharField(default="", max_length=100, null=True, blank=True, verbose_name="数据",
                             help_text="数据")
note = models.TextField(default="", verbose_name="备注", help_text="备注")
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")

class Meta:
    verbose_name = "菜单详情"
    verbose_name_plural = verbose_name

def __str__(self):
    return self.name


class Thumb(models.Model):

content = models.CharField(default="NULL", max_length=20, null=True, blank=True, verbose_name="图文详情", help_text="图文详情")
menuinfo = models.ForeignKey(MenuInfo, related_name='thumb', blank=True, verbose_name="menuinfo")
url = models.URLField(default="view", max_length=100, null=True, blank=True, verbose_name="链接", help_text="链接")
note = models.TextField(default="", max_length=100, null=True, blank=True, verbose_name="备注", help_text="备注")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")

class Meta:
    verbose_name = "Thumb"
    verbose_name_plural = verbose_name

def __str__(self):
    return self.content
class MenuInfoSerializer(serializers.ModelSerializer):

button=ButtonSerializer(many=True)
thumb=ThumbSerializer(many=True)

class Meta:
    model = MenuInfo
    fields = ("id", "user_id", "button", "thumb")


class MenuSerializer(serializers.ModelSerializer):

user = serializers.HiddenField(
default=serializers.CurrentUserDefault()
)
add_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M')

class Meta:
    model = MenuInfo
    fields = ("id", "user", "user_id", "button", "thumb", "add_time")
      submit: function(){
    console.log("here is before submitmenu");
    console.log({
        button:this.menus,
        thumb:this.req[0].thumb,
      });
    this.req[0].button = this.menus;
    console.log(this.req[0]);
    submitmenu( this.req[0].user_id, this.req[0]).then((response)=> {
      alert('修改成功');
      this.getMenuInfo();
      //本地存储用户信息
      //cookie.setCookie('name',this.userName,7);
      //cookie.setCookie('token',response.data.token,7);
      //存储在store
      // 更新store数据
      //that.$store.dispatch('setInfo');
      //跳转到自定义菜单页面
      console.log("push menuconfig page");
    })
    .catch(function (error) {
      console.log(error);
    });
  },
  getMenuInfo: function() { //请求用户信息
    getMenuDetail().then((response)=> {
          console.log(response.data);
          console.log("above is data");
          console.log(response.data[0].button);
          this.req = response.data;
          this.menus = response.data[0].button;
      }).catch(function (error) {
          console.log(error);
      });
  }
export const submitmenu = (user_id, params) => {
return axios.patch(`${host}/menudetail/`+user_id+'/', params)
}

export const getMenuDetail  = () => {
return axios.get(`${host}/menudetail/`)
}