클로저를 고려하고 싶을 수 있습니다.
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)
이 각 요청에 ModelForm 개체를 만들 필요가 있기 때문에 약간의 비 효율성, 여기에,하지만 당신이 일반보기로 기능을 삽입 할 수 없습니다.
양식 작성시 추가되는 복잡성이보기 측면에서 단순성을 유지할 가치가 있는지 여부를 결정해야합니다.
여기 장점은, 그러나,이 또한 실질적으로 별도의 노력으로 업데이트 케이스와 함께 작동한다는 것입니다 : 분명히
def update_foo(request, object_id):
FooForm = make_foo_form(request)
return update_object(form_class=FooForm, object_id=object_id)
, 당신은뿐만 아니라 더 복잡한 경우에이 방법을 사용할 수 있습니다.
나는 (감사합니다. 어쨌든;)). 내가하려는 일은 일반 뷰를 사용하여 새로운 객체를 저장하는 코드를 작성할 필요가 없다. Django 코드는 철저하게 테스트되므로 가능할 때마다 내 코드 대신 사용하는 것이 좋습니다. –