Python django rest框架提示:";类型错误:需要一个主键,但得到一个‘;dict’&引用;
这些问题困扰了我好几天。我已经用django rest framwork设置了一个程序。“vue.js”中的前端程序。当“修补”前端中的数据时,服务器显示“400”。chrome的“console.log”函数显示“type error:需要主键,但需要dict”。 详情如下: views.py models.py 序列化程序.py 以下是前端代码的一部分: menuConfig.vue api.jsPython 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
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/`)
}