Re: Class-based view improvement idea

108 views
Skip to first unread message

Kevin Veroneau

unread,
Nov 11, 2012, 2:12:00 PM11/11/12
to django-d...@googlegroups.com
Scratch this, I just noticed that the dev docs explain a lot more than the 1.3/1.4 docs do.  Perhaps having this documentation in 1.3/1.4 as well, or at least mentioning there that the dev docs contain much more information.

On Sunday, 11 November 2012 11:31:41 UTC-6, Kevin Veroneau wrote:
Hello Everyone,

  I have been using class-based views for sometime now, and I am running into an issue while subclassing CreateView, and think that this type of thing could be placed into Django somehow to make it easier to implement.

  Most multi-user websites connect models to a user by some means, so the posts they make or articles they add list them as the owner/poster of it.  Assigning the object to the user when using class-based views at the moment is annoying to say the least:

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.save()
        return super(ModelFormMixin, self).form_valid(form)

  This is what I currently do, and it looks messy and unorganized.  I would like a way to easily assign additional data to the self.object without going through all this.  You may notice that I am calling super() on ModelFormMixin, when this is a CreateView, well the super() of CreateView will attempt to re-create the self.object from a form.save(), and since I already created the object here, with no easy way to just pass self.object...  Anyways, you get the idea.

  Perhaps a new overridable method that allows us to do something with an uncommitted object before it is saved.  Here is a new form_valid I propose:

class ModelFormMixin(...):
    def not_sure_of_naming(self):
        pass
    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.not_sure_of_naming()
        self.object.save()
        return super(ModelFormMixin, self).form_valid(form)

  This will allow us developers using class-based views to easily perform tasks on a self.object before it is finally saved back into the database.  The above implementation is just an example of what I would love to see in a future version of class-based views.

Best Regards,
  Kevin Veroneau
  Python Diary
  http://www.pythondiary.com/

Reply all
Reply to author
Forward
0 new messages