У объекта '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()