2015-12-14 2 views
1

У меня проблема с большим количеством многих отношений удаления и добавления.django bulk удалить и добавить многие ко многим отношениям

Это 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') 

Это мой апи до сих пор я пытаюсь фильтровать ресурс по рк поэтому у меня есть правильный пользователь, чтобы добавить навыки, чтобы затем очистить все отношения, которые уже могут быть добавлены, а затем добавьте новые отношения.

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, но я следил за документами

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

Джанго docs.

+0

Не хочу ли я, чтобы это был список идентификаторов, так как эти идентификаторы - это уровни навыков, которые я хочу приложить? Я очень новичок в этом, но я пытаюсь растянуться, Теперь я получаю ошибку . Аргумент int() должен быть строкой или числом, а не «QuerySet». . - это QuerySet, а не только другой тип списка – SpeedyH30

+0

Извините, я отредактировал ответ. Это '* навыки'. Посмотрите на это SO q & a: http://stackoverflow.com/questions/4979542/python-use-list-as-function-parameters –

+0

Святое дерьмо, Если бы я мог вас поцеловать, я бы это сделал. Я не думаю, что у меня были бы навыки = ReferenceSkillList.objects.filter (id__in = body ['skills']) Большое вам спасибо, если бы я смог проголосовать за вас больше, я бы хотел, дефой самый полезный человек, которого я имею встречается на SO до сих пор. – SpeedyH30

Смежные вопросы