I've been searching really hard for this, and i can't find it anywhere. So, here it goes:
I'm trying to build an generic class that takes a generic Model as parameter and creates a form for it. For this i'm using Django's ModelForm and CreateView classes. The main goal to this, is when i need to create a new form, i just declare a new URL passing the Model name.
url(r'^create', GenericCreate(model=Author).as_view(), name='create'),
class GenericCreate(CreateView):
def __init__(self, model, *args, **kwargs):
super(GenericCreate, self).__init__(*args, **kwargs)
self.form_class = to_modelform(self.model)
to_modelform is a function that i implemented that converts a model to a modelform, and it works.
This gives me the following error:
AttributeError at /create This method is available only on the view class.
Thank you in advance!
You should not be creating an instance of the view class, as_view
will do that for you.
You would normally call ViewClass.as_view()
, not ViewClass().as_view()
.
Also, CreateView
already takes model
as a parameter, so you should define your url as:
url(r'^create', CreateView.as_view(model=Author), name='create'),
For a proper look at how this works, have a look at the as_view
method on CreateView. (Full disclosure -- I built ccbv.co.uk
.)
meshy has provided the answer, but note that your to_modelform
function is unnecessary. CreateView works perfectly well with a model or model instance rather than a form, see the documentation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With