2015-12-14 338 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