Javascript django批量删除和添加多对多关系
我对批量多对多关系删除和添加有问题 这是发送要更新的用户pk和将添加到多对多的技能pk的JSJavascript django批量删除和添加多对多关系,javascript,python,ajax,django,Javascript,Python,Ajax,Django,我对批量多对多关系删除和添加有问题 这是发送要更新的用户pk和将添加到多对多的技能pk的JS function attachskillls(){ var checkedValues = $('input:checkbox:checked').map(function() { return this.value; }).get(); console.log(checkedValues) data = { 'skills' : checkedValues, 'pk' : getUr
function attachskillls(){
var checkedValues = $('input:checkbox:checked').map(function() {
return this.value;
}).get();
console.log(checkedValues)
data = {
'skills' : checkedValues,
'pk' : getUrlVars()["id"]
}
console.log(data)
$.ajax({
type: "POST",
url: "/api/skill/attch/",
data: JSON.stringify(data),
contentType: "application/json",
dataType: "json"
})
数据是这样打包的
{"skills":["1","2","3"],"pk":"1"}
这是与技能相关的模型
class Resource(models.Model):
title = models.CharField(max_length=10)
preferred_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=30)
employstatus = models.CharField(max_length=20)
employer = models.ForeignKey('Employer')
role = models.ForeignKey('Role')
location = models.ForeignKey('Location')
workphone = models.CharField(max_length=25, blank=True, null=True)
mobile_phone = models.CharField(max_length=15, blank=True, null=True)
email = models.CharField(max_length=15, blank=True, null=True)
notes = models.CharField(max_length=200, blank=True, null=True)
updated_by = models.CharField(max_length=30, blank=True, null=True)
skillset = models.ManyToManyField('ReferenceSkillList')
这是我的api,到目前为止,我正在尝试按pk筛选资源,以便我有正确的用户添加技能,然后清除可能已添加的所有关系,然后批量添加新关系
def Skillattachment(request):
body = json.loads(request.body)
if request.method == "POST":
pk = body['pk']
skills = body
res = Resource.objects.filter(pk=pk)
res.skillset.clear()
res.skillset.add(skills)
else:
search_id = ''
return HttpResponse(json.dumps(body), content_type='application/json')
有没有更好的方法来做我想做的事情
我当前收到错误消息
“QuerySet”对象没有属性“skillset”
虽然我不确定为什么?也许我做的M2M不正确,但我遵循了文档您应该使用
res=Resource.objects.get(pk=pk)
<代码>过滤器将为您提供查询集作为结果
另外,变量skills
只是一个数据结构,而不是对象。您可能需要:
skills = ReferenceSkillList.objects.filter(id__in=body['skills'])
res = Resource.objects.get(pk=pk)
res.skillset.clear()
res.skillset.add(*skills)
Django.一般来说,您应该在语句末尾使用分号。我不希望它成为ID列表,因为这些ID是我要附加的技能的PK吗?我对这一点很陌生,但我正在尝试延伸,我现在确实得到int()参数的错误必须是字符串或数字,而不是'QuerySet'是QuerySet而不仅仅是另一种类型的列表抱歉,我编辑了答案。这是
*技能
。看看这个,问答:天哪,如果我能吻你,我会的。我不认为我会得到skills=ReferenceSkillList.objects.filter(id_uuin=body['skills'])非常感谢,如果我能投你更多的票,我会的,deffo是我迄今为止遇到的最有帮助的人。谢谢@ShangWang这个答案在Django 2.1.5上仍然有效。将skills=…filter(…)
行替换为skills=…bulk\u create(…)
,这样我就可以创建多个项目,然后将它们添加到manytomy
字段中<代码>(*技能)是关键点。哈,有没有可能不点击两次数据库就可以做到这一点?(清除()和添加()/set())