简体   繁体   English

在django中保存或显示表单数据的最简单方法

[英]simplest way to save or display data for form in django

I have the following code in a view for the purpose of handling the display, save, or update of data. 我在视图中有以下代码,用于处理数据的显示,保存或更新。

The code looks unruly and seems like it can be simplified. 代码看起来不守规矩,似乎可以简化。 What can I do to accomplish the requirements above while not repeating myself and have as simple logic as possible? 我可以做些什么来完成上述要求,而不是重复自己,并尽可能简单的逻辑?

def details(request, pk=None):
    customer = request.user.customer
    existing_detail = Detail()
    detail_queryset = Detail.objects.filter(customer_id=customer.id)

    if detail_queryset:
        existing_detail = detail_queryset[0]

    if request.method == 'POST':
        form = detailForm(request.POST)
        if form.is_valid():
            pay_out = form.cleaned_data['title']
            if detail_queryset:
                existing_detail.title = title
                existing_detail.save()
            else:
                detail = Detail(customer=customer, payoutType=title)
                detail.save()
            return HttpResponseRedirect('/settings/details/')
    else:
        if detail_queryset:
            form = detailForm(initial={'title': existing_detail.title})
        else:
            form = detailForm()

    context = {
        'title':'details',
        'view':'detail',
        'form': form
    }
    return render(request, 'customers/detail.html', context)

You can use a ModelForm for this purpose. 您可以将ModelForm用于此目的。

class DetailsForm(forms.ModelForm):
    class Meta:
        model = Detail

@login_required
def details(request, pk=None):
    customer = request.user.customer

    try:
        existing_detail = Detail.objects.get(customer_id=customer.id)
    except:
        existing_detail = None

    details_form = DetailsForm(instance = existing_detail)

    if request.method == 'POST':
        form = DetailsForm(request.POST, instance=existing_details)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/settings/details/')
    context = {
        'title':'details',
        'view':'detail',
        'form': form
    }
    return render(request, 'customers/detail.html', context)

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

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