Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript django批量删除和添加多对多关系_Javascript_Python_Ajax_Django - Fatal编程技术网

Javascript django批量删除和添加多对多关系

Javascript 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

我对批量多对多关系删除和添加有问题

这是发送要更新的用户pk和将添加到多对多的技能pk的JS

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())