Django не удается обработать поле формы ManyToMany в представлении для создания и сохранения нового экземпляра модели
У меня есть две модели с отношением ManyToMany. В моем представлении я хочу обработать пользовательский ввод поля MultipleChoicesField и присвоить выбранные варианты объекту Poller.
Вызывает следующую ошибку:
Прямое назначение на прямую сторону множества "многие-ко-многим" запрещено. запрещено. Вместо этого используйте poller_categories.set().
.
Models.py
class Categories(models.Model):
    poller_category = models.CharField(max_length=30)
    poller_category_id = models.IntegerField(default=0)
    def __str__(self):
        return str(self.poller_category)
class Pollers(models.Model):
    [..]
    # Poller Category
    poller_categories = models.ManyToManyField(Categories)
    def __str__(self):
        return str(self.poller_id)
Forms.py
class PollersForm(forms.Form):
    [..]
    # Poller Tags
    poller_categories = forms.ModelMultipleChoiceField(queryset=Categories.objects.all())
views.py
def raise_poller(request):
        # if this is a POST request we need to process the form data
        if request.method == 'POST':
            # create a form instance and populate it with data from the request:
            form = PollersForm(request.POST)
            # check whether it's valid:
            if form.is_valid():
                # process the data in form.cleaned_data as required
                poller_nature = form.cleaned_data['poller_nature']
                poller_text = form.cleaned_data['poller_text']
                poller_choice_one = form.cleaned_data['poller_choice_one']
                poller_choice_two = form.cleaned_data['poller_choice_two']
                poller_categories = form.cleaned_data['poller_categories']
                # Get the user
                created_by = request.user
                # Save the poller to the database
                p = Pollers(poller_nature = poller_nature,
                            poller_text = poller_text,
                            poller_choice_one = poller_choice_one,
                            poller_choice_two = poller_choice_two,
                            poller_categories = poller_categories,    # here seems to be my issue?
                            created_by = created_by)
                p.save()
                # redirect to a new URL:
                return HttpResponseRedirect('/')
                
Вы не можете напрямую присвоить значение объекту poller_categies. Вы должны сначала сохранить объект Pollers в базе данных, а затем использовать p.poller_categories.set(…) для заполнения отношения многие-ко-многим: отношение 
p = Pollers(
    poller_nature = poller_nature,
    poller_text = poller_text,
    poller_choice_one = poller_choice_one,
    poller_choice_two = poller_choice_two,
    # no poller_categories,
    created_by = created_by
)
p.save()
p.poller_categories.set(poller_categories)
 Основная причина этого заключается в том, что вам нужен первичный ключ объектов both, прежде чем вы сможете связать два элемента вместе, поэтому в этот момент в базе данных еще нет записи для p.