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 -~----------~----~----~----~------~----~------~--~---