在Django表单中打开/编辑/保存记录
目前我有一个Django表单,可以将新客户添加到数据库。我也有一个表格显示当前在这个数据库中的所有客户。现在,我想单击客户表中的客户名称以打开现有客户,并可以选择编辑记录并保存。在Django表单中打开/编辑/保存记录
下面是我目前的代码部分,如果需要更多的请查询。
我navbar.html
<li><a href='{% url "customeradd" %}'>New Customer</a></li>
我urls.py
url(r'^customeradd/$', 'customer.views.customeradd', name='customeradd'),
我views.py
def customeradd(request):
form = CustomerAddForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
save_it = form.save(commit=False)
save_it.save()
messages.success(request, 'Customer added succesfully')
return HttpResponseRedirect('/customeroverview/')
else:
messages.error(request, 'Customer save error, please check fields below')
else:
form = CustomerAddForm()
return render_to_response("customer-add.html",
{"customer_add_form": form},
context_instance=RequestContext(request))
customeroverview.html这说明所有的客户(仅三个字段的表显示)
<td><a href='{% url "customeradd" %}'>{{ customer.customer_name }}</a></td>
<td>{{ customer.customer_type }}</td>
<td>{{ customer.customer_address }}</td>
因此,现在我可以单击客户表中的客户名称,并且CustomerAddForm将打开。在目前的情况下,由于没有论据给出,因此空地是空的。
我会如何对在customeroverview.html的customer.customer_name超级链接,当点击通过customer.id场作为参数?
如何在视图中捕获此customer.id - urls.py应该如何显示?
当窗体打开与现有customer.id,我应该如何保存当前记录,而不是创建一个新的customer.id
任何帮助的/在这种情况下,建议将是非常有益的在我对Django GET/POST的理解中。
也许你应该做的:
在urls.py url(r'^customeradd/(?P<id>\w+)$', 'customer.views.customeradd', name='customeredit'), url(r'^customeradd/$', 'customer.views.customeradd', name='customeradd'),
在views.py: def customeradd(request, id = None): if id: customer = Customer.objects.get(pk = id) else customer = None form = CustomerAddForm(request.POST, instance = customer) .....
在你的模板
<td>< a href='{% url "customeredit" customer.id %}' >{{ customer.customer_name }}</a></td> <td>{{ customer.customer_type }}</td> <td>{{ customer.customer_address }}</td>
基本上,你什么正在讨论被称为CRUD(创建,读取,更新和删除)。 如果你正在编写一个简单的webapp GUI(这对我来说似乎是这样),可以找到一个简单的例子here关于如何用Django实现CRUD。
但是,如果您正在编写REST API,事情会变得更复杂一些。那么Django REST Framework可能会有所帮助。
感谢您将链接加入书签以供参考 – phicon 2014-10-09 12:59:57
伟大的工程适用于Step01和Step02。但是,当我单击窗体上的提交它创建一个新的记录。任何关于保存已打开的ID的建议? – phicon 2014-10-09 13:04:07
您是否在CustomerAddForm中创建了保存功能? – Assane 2014-10-10 15:52:37