2015-12-14 337 views
1

我有一个批量问题与多对多的关系删除和添加。django批量删除并添加多对多关系

这是发送要更新的用户的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'对象没有属性'技能集' 虽然我不确定为什么?也许我错误地制造了M2M,但我遵循了文档

+0

一般来说,你应该在语句末尾加上分号 – thanksd

回答

0

您应该使用res = Resource.objects.get(pk=pk)来代替。 filter会给你一个查询集作为结果。

另外你的变量skills只是一个数据结构不是对象。您可能需要:

skills = ReferenceSkillList.objects.filter(id__in=body['skills']) 
res = Resource.objects.get(pk=pk) 
res.skillset.clear() 
res.skillset.add(*skills) 

Django docs

+0

我不希望它是一个ID列表,因为这些ID是我想附加的技能的PKS? 我很新,但我试图伸出, 我现在得到的错误 int()参数必须是一个字符串或一个数字,而不是'QuerySet' 是一个QuerySet不只是另一个列表类型 – SpeedyH30

+0

对不起,我编辑了答案。这是'*技能'。看看这个问题&答:http://stackoverflow.com/questions/4979542/python-use-list-as-function-parameters –

+0

神圣的废话,如果我能吻你,我会的。 我不认为我会得到 技能= ReferenceSkillList.objects.filter(id__in = body ['skills']) 非常感谢你,如果我可以投票给你,我会更多,deffo我最有帮助的人迄今为止遇到的SO。 – SpeedyH30