javascript - 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' : 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 docs .

关于javascript - django 批量删除和添加多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34274506/

相关文章:

javascript - 在来自 node.js 后端的浏览器中查看/下载 pdf

javascript - Clipper.js 不适用于坐标集

python - 用 C 解释来自 Modbus ASCII 的数据

jquery - 使用 jquery 发布表单并在新窗口中打开

jquery - 在获取响应时,AJAX 调用中是否会出现响应不匹配的情况?

javascript - 淡出图像,新图像在图像缩略图库顶部淡出

java - 在 Java 中解析 Javascript,Javascript 对象

python - 等价于复杂列表理解的循环表达式

python - 如何运行sqlacodegen?

javascript - 点击表格行时如何发出Ajax请求?