title: Django updating a model with a many-to-many field
body: <p>I am trying to make a post editor for my website. When I trigger the post model I receive the error "Cannot update model field  (only non-relations and foreign keys permitted)." when updating. How do I update this model?</p>
  
  <p><strong>models.py</strong></p>
  
  <pre><code>class Post(models.Model):
      title = models.CharField(max_length=256)
      disclaimer = models.CharField(max_length=256, blank=True)
      BLOGS = 'blogs'
      APPLICATIONS = 'applications'
      GAMES = 'games'
      WEBSITES = 'websites'
      GALLERY = 'gallery'
      PRIMARY_CHOICES = (
          (BLOGS, 'Blogs'),
          (APPLICATIONS, 'Applications'),
          (GAMES, 'Games'),
          (WEBSITES, 'Websites'),
      )
      content_type = models.CharField(max_length=256, choices=PRIMARY_CHOICES, default=BLOGS)
      screenshot = models.CharField(max_length=256, blank=True)
      tags = TaggableManager()
      body = RichTextField()
      date_posted = models.DateTimeField(default=datetime.now)
      date_edited = models.DateTimeField(blank=True, null=True)
      visible = models.BooleanField(default=True)
      nsfw = models.BooleanField()
      allow_comments = models.BooleanField(default=True)
      files = models.ManyToManyField(File, blank=True)
  
      def __str__(self):
          if (self.visible == False):
              return '(Hidden) ' + self.title + ' in ' + self.content_type
          return self.title + ' in ' + self.content_type
  </code></pre>
  
  <p><strong>views.py</strong></p>
  
  <pre><code>class EditPostView(UpdateView):
      form_class = PostForm
      model = Post
      template_name = 'personal/editpost.html'
  
      def get(self, request, pk):
  
          if (not request.user.is_superuser):
              return HttpResponseForbidden()
  
          post = Post.objects.get(id=pk)
          if (post is None):
              return HttpResponseNotFound()
  
          form = self.form_class(instance=post)
  
          return render(request, self.template_name, {'form': form, 'post': post})
  
      def post(self, request, pk):
  
          if (not request.user.is_superuser):
              return HttpResponseForbidden()
  
          post = Post.objects.get(id=pk)
          if (post is None):
              return HttpResponseNotFound()
  
          form = self.form_class(request.POST, instance=post)
  
          if (form.is_valid()):
              title = form.cleaned_data['title']
              content_type = form.cleaned_data['content_type']
              screenshot = form.cleaned_data['screenshot']
              tags = form.cleaned_data['tags']
              body = form.cleaned_data['body']
              nsfw = form.cleaned_data['nsfw']
              allow_comments = form.cleaned_data['allow_comments']
              files = form.cleaned_data['files'] 
  
              date_edited = datetime.now()
  
              Post.objects.filter(id=pk).update(title=title, content_type=content_type,
                                                screenshot=screenshot, tags=tags, 
                                                body=body, nsfw=nsfw, 
                                                allow_comments=allow_comments,
                                                files=files,
                                                date_edited=date_edited)
  
              return redirect('/posts/' + str(post.id))
          else:
              return HttpResponseNotFound()
  
          return HttpResponseNotFound()
  </code></pre>