繁体   English   中英

Django打开/编辑记录,而不是创建新记录

[英]Django Open / Edit record instead of Creating new

我有一个CustomerAddForm和一个CustomerOverview HTML表。 当我在CustomerAddForm中添加新记录时,它会出现在CustomerOverview HTML表中。 我还具有通过单击客户名称从CustomerOverview HTML打开现有客户的功能。

当我打开一个现有客户时,它会打开“客户”罚款,但是当我点击“提交”时,它会将打开的客户保存到新记录中。 如果我在视图中硬编码客户ID,它将保存给定的ID。 因此,在单击“提交”时,似乎没有ID被推送。

正常;

def customeradd(request, id = None)

具有硬编码的ID;

def customeradd(request, id = 1)

我的views.py; 到达提交请求后的位置。方法=='POST'始终为true。 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))

我的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

我的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'),

客户add.html

{% block content %}

{% load crispy_forms_tags %}
{% crispy customer_add_form customer_add_form.helper %}


{% endblock %}

用这个:

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

并更换

self.helper.form_action = '/customeradd/'

self.helper.form_action = ''

在你的forms.py

您可以使用特定功能来编辑客户:

@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))

这意味着您需要修改urls.py

url(r'^customeredit/(?P<id>\w+)$', 'customer.views.customeraedit', name='customeredit'), 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM