[英]Django Open / Edit record instead of Creating new
I have a CustomerAddForm and a CustomerOverview HTML Table. 我有一个CustomerAddForm和一个CustomerOverview HTML表。 When i add a new record in the CustomerAddForm it appears in the CustomerOverview HTML table. 当我在CustomerAddForm中添加新记录时,它会出现在CustomerOverview HTML表中。 I also have the functionality to open existing customers from the CustomerOverview HTML by clicking on the customer name. 我还具有通过单击客户名称从CustomerOverview HTML打开现有客户的功能。
When i open an existing Customer it opens the Customer fine, but when i hit submit it saves the opened customer to a new record. 当我打开一个现有客户时,它会打开“客户”罚款,但是当我点击“提交”时,它会将打开的客户保存到新记录中。 If i hard code the Customer ID in the view it saves the given ID. 如果我在视图中硬编码客户ID,它将保存给定的ID。 So it looks like no id is pushed through when hitting submit. 因此,在单击“提交”时,似乎没有ID被推送。
Normal; 正常;
def customeradd(request, id = None)
With hardcoded id; 具有硬编码的ID;
def customeradd(request, id = 1)
My views.py; 我的views.py; where it seems after hitting submit request.method == 'POST' is always true. 到达提交请求后的位置。方法=='POST'始终为true。 and the else statement is never run. else语句永远不会运行。
def customeradd(request, id = None):
if id:
customer = Customer.objects.get(pk = id)
else:
customer = None
if request.method == 'POST':
form = CustomerAddForm(request.POST or None, instance = customer)
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(instance = customer)
if form.is_valid():
form.save()
messages.success(request, 'Customer edited succesfully')
return HttpResponseRedirect('/customeroverview/')
return render_to_response("customer-add.html",
{"customer_add_form": form},
context_instance=RequestContext(request))
my forms.py (django-crispy-form) 我的forms.py(django-crispy-form)
class CustomerAddForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(CustomerAddForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_action = '/customeradd/'
self.helper.add_input(Submit('submit', 'Submit'))
self.helper.add_input(Button('cancel', 'Cancel'))
class Meta:
model = Customer
my urls.py 我的urls.py
url(r'^customeroverview/$', 'customer.views.customeroverview', name='customeroverview'),
url(r'^customeradd/$', 'customer.views.customeradd', name='customeradd'),
url(r'^customeradd/(?P<id>\w+)$', 'customer.views.customeradd', name='customeredit'),
customer-add.html 客户add.html
{% block content %}
{% load crispy_forms_tags %}
{% crispy customer_add_form customer_add_form.helper %}
{% endblock %}
use this: 用这个:
def customeradd(request, id=None):
if id:
customer = Customer.objects.get(pk = id)
else:
customer = Customer()
if request.method == 'POST':
form = CustomerAddForm(request.POST, instance=customer)
if form.is_valid():
form.save()
messages.success(request, 'Customer added succesfully')
return HttpResponseRedirect('/customeroverview/')
else:
messages.error(request, 'Customer save error, please check fields below')
else:
form = CustomerAddForm(instance = customer)
return render_to_response("customer-add.html",
{"customer_add_form": form},
context_instance=RequestContext(request))
and replace 并更换
self.helper.form_action = '/customeradd/'
with 同
self.helper.form_action = ''
in your forms.py
在你的forms.py
You can use a specific function to edit a customer: 您可以使用特定功能来编辑客户:
@require_POST
@csrf_protect
def customeredit(request, id=None):
edited_customer = CustomerAddForm(request.POST)
if edited_customer.is_valid():
customer = edited_customer.save(commit=False)
customer.id = id
customer.save()
messages.success(request, 'Customer edited succesfully')
return HttpResponseRedirect('/customeroverview/')
else:
messages.error(request, 'Customer save error, please check fields below')
return render_to_response("customer-add.html",
{"customer_add_form": edited_customer},
context_instance=RequestContext(request))
That means you need to modify urls.py
这意味着您需要修改urls.py
url(r'^customeredit/(?P<id>\w+)$', 'customer.views.customeraedit', name='customeredit'),
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.