汎用ビューのすべての機能を使用する場合は、オリジナルをテンプレートとして使用して新しい汎用ビューを作成できます。
例:
def create_object_with_initial(request, model=None, template_name=None,
template_loader=loader, extra_context=None, post_save_redirect=None,
login_required=False, context_processors=None, form_class=None, initial=None):
if extra_context is None: extra_context = {}
if login_required and not request.user.is_authenticated():
return redirect_to_login(request.path)
model, form_class = get_model_and_form_class(model, form_class)
if request.method == 'POST':
form = form_class(request.POST, request.FILES)
if form.is_valid():
new_object = form.save()
msg = ugettext("The %(verbose_name)s was created successfully.") %\
{"verbose_name": model._meta.verbose_name}
messages.success(request, msg, fail_silently=True)
return redirect(post_save_redirect, new_object)
else:
print "creating", form_class, " with initial data ", initial
form = form_class(initial=initial)
# Create the template, context, response
if not template_name:
template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower())
t = template_loader.get_template(template_name)
c = RequestContext(request, {
'form': form,
}, context_processors)
apply_extra_context(extra_context, c)
return HttpResponse(t.render(c))
これは、初期データを組み込むために変更ライン3と21のみで/site-packages/django/views/generic/create_update.pyからコピーされます。ご想像のとおり
そして、それを使用する:
object_info = {
'model': YourModel,
'initial': {'data' : 'Initial Value'},
'template_name': 'template.html'
}
url(r'^path/$',
login_required(create_object_with_initial),
object_info,
name='url_name'),
動作する必要があること。
私は本当にこの目的を理解していませんが、template_nameとextra_content変数を見ましたか? しかし、真剣にHTMLページ/フォームを書いて、これを行う一般的な方法について狂ったラウンドを考えようとしないでください。特定の値(ユーザーのような)をフォームに設定する必要がある場合は、すでに非常に特殊なケースについてプログラミングしています。 – drozzy