Saving instance of Many to Many field in Django

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

Answers (1)

Pruthvi Barot
Pruthvi Barot

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

Related Questions