ManyToMany 필드에 데이터를 추가하는 방법은 무엇입니까?


83

어디에서도 찾을 수 없으므로 도움이 될 것입니다. :) 여기에 해당 필드가 있습니다.

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]

답변:


144

이것에 전념 하는 Django 문서의 전체 페이지가 있으며 내용 페이지에서 잘 색인화되어 있습니다.

페이지에 나와 있듯이 다음을 수행해야합니다.

my_obj.categories.add(fragmentCategory.objects.get(id=1))

또는

my_obj.categories.create(name='val1')

15
그런 다음 my_obj.save()업데이트를 저장 하기 위해 전화 를 해야 합니까, 아니면 자동으로 수행됩니까?
CpILL

4
@CpILL 자동으로 수행되는 것 같습니다. 에서 사용해보십시오 python manage.py shell.
Rikki

1
이 문서로 너무 .save 호출 할 필요가 docs.djangoproject.com/en/2.2/topics/db/examples/many_to_many/...
메디

4
@mehdi 다 대다 필드가있는 개체를 처음 만들 때 save를 호출하여 기본 키를 가져 오면됩니다. 그 후에는 저장하지 않고 추가 할 수 있습니다.
YungGun 19

5

경우 다른 사람이 끝에서 여기까지 관리 폼 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습니다. 어쨌든 그렇게합니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.