2013-07-14 58 views
3

爲了處理數據的顯示,保存或更新,我在視圖中有以下代碼。在django中保存或顯示錶單數據的最簡單方法

該代碼看起來不守規矩,似乎可以簡化。我可以做些什麼來完成上述要求,而不是重複自己,並儘可能簡單的邏輯?

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) 

回答

2

您可以使用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) 
相關問題