title: Django CreateView: How to perform action upon save
body: <p>I'm using a custom CreateView (CourseCreate) and UpdateView (CourseUpdate) to save and update a Course. I want to take an action when the Course is saved. I will create a new many-to-many relationship between the instructor of the new course and the user (if it doesn't already exist). </p>
  
  <p>So, I want to save the Course as course, and then use course.faculty to create that new relationship. Where is the best place to make this happen? </p>
  
  <p>I'm trying to do this in form_valid in the views, but I'm getting errors when trying to access form.instance.faculty bc the course isn't created yet (in CourseCreate). The error message is like:</p>
  
  <p>"Course: ..." needs to have a value for field "course" before this many-to-many relationship can be used.</p>
  
  <p>It's also not working in CourseUpdate. The Assists relationship is not created. Should I be trying this in the Form? But I'm not sure how to get the user info to the Form.
  Thank you.</p>
  
  <p>models.py</p>
  
  <pre><code>class Faculty(models.Model):
      last_name = models.CharField(max_length=20)
  
  class Course(models.Model):
      class_title = models.CharField(max_length=120)
      faculty = models.ManyToManyField(Faculty)
  
  class UserProfile(models.Model):
      user = models.OneToOneField(User)
      faculty = models.ManyToManyField(Faculty, through='Assists')
  
  class Assists(models.Model):
      user = models.ForeignKey(UserProfile)
      faculty = models.ForeignKey(Faculty)
  </code></pre>
  
  <p>views.py</p>
  
  <pre><code>class CourseCreate(CreateView):
      model = Course
      template_name = 'mcadb/course_form.html'
      form_class = CourseForm
      def form_valid(self, form):
          my_course = form.instance
          for f in my_course.faculty.all():
              a, created = Assists.objects.get_or_create(user=self.request.user.userprofile, faculty=f)
          return super(CourseCreate, self).form_valid(form)
  
  class CourseUpdate(UpdateView):
      model = Course
      form_class = CourseForm
      def form_valid(self, form):
          my_course = form.instance
          for f in my_course.faculty.all():
              a, created = Assists.objects.get_or_create(user=self.request.user.userprofile, faculty=f)
          return super(CourseUpdate, self).form_valid(form)
  </code></pre>