【发布时间】:2011-06-28 07:03:53
【问题描述】:
我有如下 5 个模型表格
class AccountForm(ModelForm):
class Meta:
model = Account
class TransactionForm(ModelForm):
class Meta:
model = Transaction
.
.
.
.
现在对于第一种形式,我有这个观点
def create_account(request, acc_id=None):
if acc_id:
f = Account.objects.get(pk=acc_id)
act1 = 'update/' + acc_id
else:
f = None
act1 = 'create'
if request.method == 'POST': # If the form has been submitted...
form = AccountForm(request.POST, request.FILES, instance=f) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
form.save()
return HttpResponseRedirect('/thanks/') # Redirect after POST
else:
form = AccountForm(instance=f) # An unbound form
return render_to_response('account_form.html', {
'form': form,
'action':act1,
'type':'account',
})
现在这个视图可以编辑和创建新的 AccountForm。
但我必须为其他五种形式做同样的事情。现在我必须将相同的代码复制 5 次,并进行少量更改。我需要执行相同的操作,只是表单名称会不同。
有什么方法可以让我对所有 ModelForms 使用一个函数。
我使用的模板是这个
<form action="/{{type}}/{{ action }}/" method="post" enctype="multipart/form-data" >
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><input type="submit" value="Submit" /></p>
</form>
所以基本上模板也是一样的
我的 URL.py 也必须复制如下相同的行
(r'^account/create/$', create_account),
(r'^account/update/(\d)/$', create_account),
(r'^txn/create/$', create_txn),
(r'^txn/update/(\d)/$', create_txn),
有没有可能减少代码
【问题讨论】: