Si consiglia di prendere in considerazione una chiusura.
from django.forms import ModelForm
from django.views.generic.create_update import create_object, update_object
def make_foo_form(request):
class FooForm(ModelForm):
class Meta:
model = Foo
fields = ['foo', 'bar']
def save(self, commit=True):
f = super(FooForm, self).save(commit=False)
if not f.pk: f.user = request.user
if commit: f.save()
return f
return FooForm
def create_foo(request):
FooForm = make_foo_form(request)
return create_object(form_class=FooForm)
V'è una certa inefficienza qui, in quanto è necessario per creare l'oggetto ModelForm su ogni richiesta, ma permette di iniettare la funzionalità nella vista generico.
È necessario decidere se la complessità aggiunta per la creazione di form vale la pena di mantenere la semplicità dal lato della vista.
Un vantaggio qui, però, è che questo funziona anche con il caso di aggiornamento praticamente senza sforzo supplementare:
def update_foo(request, object_id):
FooForm = make_foo_form(request)
return update_object(form_class=FooForm, object_id=object_id)
Ovviamente, è possibile utilizzare questo approccio per i casi più complessi, come bene.
fonte
2009-12-01 22:21:53
Lo so (grazie comunque;)). Quello che sto cercando di fare è usare una vista generica per questo, quindi non devo scrivere il codice per salvare il nuovo oggetto. Il codice Django è completamente testato quindi, ogni volta che è possibile, preferisco usarlo al posto del mio codice. –