Reputation: 152
I'm trying to enroll a student in a specific course through a model form. But it's throwing an error saying 'Student' object is not iterable.
My models are:
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
View
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})
Upvotes: 1
Views: 224
Reputation: 2018
Try this way:
...
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')
...
Upvotes: 1