Simon,

Ran in the same issue as you.
I filed documentation ticket #6690 to document a clean way to
dynamically create ModelForm instances. The ticket got closed because
the runtime creation of forms "isn't common enough"...

See also the thread  "ModelForm: Dynamically change model and fields"
on the django-users list from some other folks struggling with this...
http://groups.google.com/group/django-users/browse_thread/thread/7ef532fa113e78d9/e8be364504c8dcb8

Regards,

Johan

On Apr 7, 2:05 pm, Simon Willison <[EMAIL PROTECTED]> wrote:
> form_for_model is marked as deprecated but ModelForm does not appear
> to be a full replacement for it. Given an arbitrary model class (i.e.
> one that is defined at runtime, not at "compile" time) there is no
> clear way of creating a form from it using the ModelForm mechanism.
>
> Here's what I am doing at the moment:
>
> from django.db import models
> from django import newforms as forms
>
> model_name = 'sites.Site' # Actually comes from outside the system
> model_class = models.get_model(*model_name.split("."))
>
> form_class = forms.form_for_model(model_class)
> form = form_class(data_dict)
> if form.is_valid():
>     form.save()
> ...
>
> This works great, since form_for_model() works at runtime. With
> ModelForm, the model class for which I want a form has to be baked in
> to the class in the source code. I suppose I could dynamically
> construct a ModelForm subclass at runtime (any pointers on how to do
> that, including dynamically creating the inner class called "Meta",
> would be welcome) but for the above the existing form_for_model()
> function is a whole bunch more intuitive.
>
> I like the syntactic sugar provided by declarative APIs such as
> ModelForm, but I think it's important to provide a non-declarative
> alternative for people who need to dynamically construct something at
> runtime rather than baking the details in to their source code.
>
> Cheers,
>
> Simon
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to