У объекта 'ManyRelatedManager' нет атрибута 'save'

У меня та же проблема, что и в этом посте. Я попробовал решение от cshelly, но мое принятие терпит неудачу на последней приведенной строке (сохранение). Разница в том, что мой код использует представления и формы на основе модели и имеет полиморфную модель. Он выбрасывает исключение на последней строке, где происходит сохранение добавления к полю manytomany. Я использую все, что django дает в качестве сквозной таблицы. Я вижу, что значение добавляется. Если я закомментирую исключающую строку, объект match будет иметь все из формы (включая объекты, выбранные на форме из другого (в данном случае, студента) поля manytomany.

).

Любая помощь будет высоко оценена.

Вот вид:

        if form.is_valid():

            instance = form.save(commit=False)
            current_user = self.request.user
            instance.lvm_affiliate = current_user.affiliate
            instance.save()

            if pt == 'tutor':
                person = Tutor.objects.get(id=pk)
                print("before ", vars(instance))
                print("student ", instance.student.all())
                print("tutor ", instance.tutor.all())
                instance.tutor.add(person.id)
                print("after ", vars(instance))
                print("student ", instance.student.all())
                print("tutor ", instance.tutor.all())
                instance.save()
                instance.tutor.save()

вот вывод:

before  {'_state': <django.db.models.base.ModelState object at 0x000001E84D5CEAA0>, 'id': 46, 'lvm_affiliate_id': 34, 'match_status_id': 3, 'date_started': datetime.date(2022, 7, 23), 'date_dissolved': None, 'comments': ''} 
student <PolymorphicQuerySet []> 
tutor  <PolymorphicQuerySet []> 
after {'_state': <django.db.models.base.ModelState object at 0x000001E84D5CEAA0>, 'id': 46, 'lvm_affiliate_id': 34, 'match_status_id': 3, 'date_started': datetime.date(2022, 7, 23), 'date_dissolved': None, 'comments': ''} 
student <PolymorphicQuerySet []> 
tutor  <PolymorphicQuerySet [<Tutor: joey>]>
Internal Server Error: /match/filter/9/tutor/

'ManyRelatedManager' object has no attribute 'save'

Вот модель, если это будет полезно:

class Match(models.Model):

    lvm_affiliate = models.ForeignKey(Affiliate, on_delete=models.SET_NULL, null=True,  blank=False)

    tutor = models.ManyToManyField(Tutor, blank=True, help_text="The tutor(s) associated with this match.")
    student = models.ManyToManyField(Student, blank=True, help_text="The student(s) associated with this match.")

Удалите эту строку: instance.tutor.save()

Код должен работать без сохранения m2m отношения вручную - если я правильно помню .add() делает это автоматически.

Пока я пробовал множество комбинаций add() и set() для поля ManyToManyField и при вызове save(), ничего не работало. Поэтому я попробовал другой такт, и сработало следующее. Не очень красиво, но это работает.

        if form.is_valid():
            instance = Match.objects.create(match_status=form.cleaned_data['match_status'],
                                            date_started=form.cleaned_data['date_started'],
                                            comments=form.cleaned_data['comments'],
                                            lvm_affiliate = self.request.user.affiliate,)
            if pt == 'tutor':
                for student in form.cleaned_data['student']:
                    instance.student.add(student)

                person = Tutor.objects.get(id=pk)
                instance.tutor.add(person)

                instance.save()
Вернуться на верх