Как добавить данные в поле ManyToMany?
Я не могу найти его нигде, поэтому ваша помощь будет приятной для меня:) Вот это поле:
categories = models.ManyToManyField(fragmentCategory)
FragmentCategory:
class fragmentCategory(models.Model):
CATEGORY_CHOICES = (
('val1', 'value1'),
('val2', 'value2'),
('val3', 'value3'),
)
name = models.CharField(max_length=20, choices=CATEGORY_CHOICES)
Вот форма для отправки:
<input type="checkbox" name="val1" />
<input type="checkbox" name="val2" />
<input type="checkbox" name="val3" />
Я пробовал что-то вроде этого:
categories = fragmentCategory.objects.get(id=1),
Или:
categories = [1,2]
Ответы
Ответ 1
Здесь представлена целая страница документации Django хорошо проиндексированная на странице содержимого.
Как указано в этой странице, вам нужно сделать:
my_obj.categories.add(fragmentCategory.objects.get(id=1))
или
my_obj.categories.create(name='val1')
Ответ 2
В случае, если кто-то еще окажется здесь, пытаясь настроить административную форму Many2Many для сохранения, вы не можете вызвать self.instance.my_m2m.add(obj)
в переопределении ModelForm.save
, так как ModelForm.save
позже заполняет ваш m2m из self.cleaned_data['my_m2m']
который перезаписывает ваши изменения. Вместо этого позвоните:
my_m2ms = list(self.cleaned_data['my_m2ms'])
my_m2ms.extend(my_custom_new_m2ms)
self.cleaned_data['my_m2ms'] = my_m2ms
(Можно преобразовать входящий QuerySet в список - так или ManyToManyField
делает ManyToManyField
.)