在Django表单中打开/编辑/保存记录

在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将打开。在目前的情况下,由于没有论据给出,因此空地是空的。

  1. 我会如何对在customeroverview.html的customer.customer_name超级链接,当点击通过customer.id场作为参数?

  2. 如何在视图中捕获此customer.id - urls.py应该如何显示?

  3. 当窗体打开与现有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>

+0

伟大的工程适用于Step01和Step02。但是,当我单击窗体上的提交它创建一个新的记录。任何关于保存已打开的ID的建议? – phicon 2014-10-09 13:04:07

+0

您是否在CustomerAddForm中创建了保存功能? – Assane 2014-10-10 15:52:37

基本上,你什么正在讨论被称为CRUD(创建,读取,更新和删除)。 如果你正在编写一个简单的webapp GUI(这对我来说似乎是这样),可以找到一个简单的例子here关于如何用Django实现CRUD。

但是,如果您正在编写REST API,事情会变得更复杂一些。那么Django REST Framework可能会有所帮助。

+0

感谢您将链接加入书签以供参考 – phicon 2014-10-09 12:59:57