user658587
user658587

Reputation:

Django Class-Based Generic Views and ModelForms

Like much documentation on generic views in Django, I can't find docs that explicitly describe how to use the new Class-Based Generic Views with Django Forms.

How is it done?

Upvotes: 7

Views: 2735

Answers (2)

acid_crucifix
acid_crucifix

Reputation: 362

The easiest way to use model forms with class based views is to pass in the model and keep a slug / pk captured in url, in which case you will not need to write any view code.

url(r'^myurl/$', CreateView.as_view(model=mymodel)) 
#Creates a model form for model mymodel

url(r'^myurl/(?<pk>\w+)/$', UpdateView.as_view(model=mymodel)) 
#Creates a model form for model mymodel and updates the object having pk as specified in url

url(r'^myurl/(?<slug>\w+)/$', DeleteView.as_view(model=mymodel, slug_field="myfield")) 
#Creates a model form for model mymodel and deletes the object denoted by mymodel.objects.get(my_field=slug)

You can also override methods to obtain more complex logic. You can also pass a queryset instead of a model object.

Another way is to create a modelform in forms.py and then pass form_class to the url as

url(r'^myurl/$', CreateView.as_view(form_class=myform)) 

This method allows you to define form functions as well as Meta attributes for the form.

Upvotes: 2

Alasdair
Alasdair

Reputation: 308799

What have you tried so far? The class based views are pretty new, and the docs don't have a lot of examples, so I think you're going to need to get your hands dirty and experiment!

If you want to update an existing object, then try using UpdateView. Look at the mixins it uses (e.g ModelFormMixin, SingleObjectMixin, FormMixin) to see which methods you can/have to override.

Good luck!

Upvotes: 3

Related Questions