#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», прежде чем можно будет использовать это отношение «многие ко многим».