以Django Form打开/编辑/保存记录

时间:2014-10-08 21:35:58

标签: python django post get django-forms

目前我有一个Django表单,我可以在其中添加新客户到数据库。我还有一个表格,显示当前在此数据库中的所有客户。现在,我想点击客户表中的客户名称以打开现有客户,并可以选择编辑记录并保存。

以下是我目前的代码部分,如果需要更多,请询问。

我的navbar.html

<li><a href='{% url "customeradd" %}'>New Customer</a></li>

my urls.py

url(r'^customeradd/$', 'customer.views.customeradd', name='customeradd'),

my 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>

现在我可以点击customer表中的客户名称,并打开CustomerAddForm。由于没有给出任何论据,当前情况下的背景是空的。

  1. 当点击customeroverview.html中的customer.customer_name超链接时,如何将customer.id字段作为参数传递?

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

  3. 使用现有的customer.id打开表单时,如何保存当前记录而不是创建新的customer.id

  4. 关于这种情况的任何帮助/建议对我理解Django GET / POST非常有帮助。

2 个答案:

答案 0 :(得分:2)

也许你应该这样做:

在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>

答案 1 :(得分:1)

基本上,你所说的是CRUD(创建,读取,更新和删除)。 如果您正在编写一个简单的Web应用程序GUI(对我来说似乎如此),可以找到一个简单的示例here,了解如何使用Django实现CRUD。

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