簡體   English   中英

django批量刪除並添加多對多關系

[英]django bulk remove and add many to many relationships

我在批量刪除和添加多對多關系方面存在問題。

這是JS,它發送要更新的用戶pk和將要添加到多對多技能的pk。

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) filter將為您提供一個查詢集作為結果。

同樣,您的可變skills只是數據結構而不是對象。 您可能需要:

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

Django 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM