Сохранение экземпляра поля многие ко многим в Django

#python #django

#python #django

Вопрос:

Я пытаюсь записать студента на определенный курс через форму модели. Но он выдает ошибку, в которой говорится, что объект ‘Student’ не является итеративным.

Мои модели:

 class Student(User):
    full_name = models.CharField(max_length=300)


class Course(models.Model):
    course_name = models.CharField(max_length=300)
    author = models.ForeignKey(Teacher,on_delete=models.CASCADE,null=True)
    student = models.ManyToManyField(Student)
    course_content = models.TextField(null=True)

    def __str__(self):
        return self.course_name
  

Вид

 def course_enroll(request,pk):
    objects = Course.objects.get(id=pk)
    form = CourseEnrollForm(instance=objects)
    if request.method == "POST":
        form = CourseEnrollForm(request.POST)
        if form.is_valid():
            #name = Student.objects.get(username = request.user.username)
            name = get_object_or_404(Student,username = request.user.username)
            instance = form.save(commit=False)
            instance.save()
            instance.student.set(name)
            instance.save_m2m()
            print('saved')
        else:
            print('not saved')


    return render(request,'course/enroll.html',{"form":form})
  

Комментарии:

1. Проблема в том, что вы называете это, что вы вызываете атрибут student , и вы убедили себя, что это student но это должно быть students , так что это менеджер студентов, вы можете .add или .remove или даже .all() в зависимости от ваших потребностей

Ответ №1:

Попробуйте этот способ:

 ...
if form.is_valid():
    name = get_object_or_404(Student,username = request.user.username)
    instance = form.save(commit=False)
    instance.save()
    instance.student.add(name)
    instance.save()
    print('saved')
...
  

Комментарии:

1. без метода save_m2m , который выдает «<Курс: Django>», должно иметь значение для поля «id», прежде чем можно будет использовать это отношение «многие ко многим».