title: What is the best way to pass the request variable to the model using CreateView
body: <p>I am working on a messaging system where I want to set the originator of the message based on the currently logged in user.</p>
  
  <pre><code>class Message(models.Model):
      originator = models.ForeignKey(User, related_name='+')
      destination = models.ForeignKey(User, related_name='+')
      subject = models.CharField(max_length=100)
      content = models.TextField()
  </code></pre>
  
  <p>I use a ModelForm and CreateView to represent this:</p>
  
  <pre><code>class MessageForm(forms.ModelForm):
  
      class Meta:
          model = Message
          fields = ('destination', 'subject', 'content')
  </code></pre>
  
  <p>So prior to saving this form, <code>originator</code> needs to be set to be the currently logged-in user.  I don't think overriding the <code>save</code> method of the model is appropriate here, so i was going to do it in the form's <code>save</code> method, however I don't have access to the request variable.  In <a href="https://stackoverflow.com/questions/5773724/how-do-i-use-createview-with-a-modelform/5774124#5774124">another CreateView post</a> the recommendation was to override the <code>get_form_kwargs</code> method:</p>
  
  <pre><code>class MyFormView(FormView):
      def get_form_kwargs(self):
          # pass "user" keyword argument with the current user to your form
          kwargs = super(MyFormView, self).get_form_kwargs()
          kwargs['user'] = self.request.user
          return kwargs
  </code></pre>
  
  <p>However that doesn't work, since you can't actually pass the kwarg <code>user</code> to the ModelForm, since ModelForm doesn't accept custom arguments.</p>
  
  <p>What is the best (cleanest and most practical) way to update the <code>originator</code> variable with the user information?</p>