2012-08-13 67 views
1

我一直在嘲笑這個幾個小時,我對這個問題感到困惑。這個視圖應該執行兩個操作。拳頭和工作操作是用提交的表單數據創建對象。第二個操作是根據唯一字段'bar_code'更新'status'字段。最初保存後,然後更新,我得到由唯一屬性「%s與此%s已存在」導致的錯誤,這是預期的。我真的想保持視圖來執行這兩個操作。根據視圖中現有的唯一字段更新字段

def check_in_part_two(request): 
    errlst=[] 
    c={} 
    c.update(csrf(request)) 
    if request.method == 'POST': 
     form = PartForm(request.POST) 
     if form.is_valid(): 
      try: 
       # Test if the part row exists based on bar_code 
       instance = Part.objects.get(bar_code=request.POST['bar_code']) 
      except Part.DoesNotExist: 
       # Clean the sn and create new row 
       form.cleaned_data['serial_number'] 
       form.save() 
       return http.HttpResponseRedirect('/current_count/') 
      else: 
       edit = PartForm(request.POST, instance=instance, fields=['status']) 
       if edit.is_valid(): 
        edit.cleaned_data['bar_code'] 
        edit.save() 
        return http.HttpResponseRedirect('/current_count/') 

    else: 
     form = PartForm(initial={'status':3L, 'serial_number':'placeholder'}) 
    return render(request,'add_part.html',{ 
              'title':'Add Item', 
              'form': form, 
              }) 

回答

3

首先,我不知道你用form.cleaned_data['serial_number']edit.cleaned_data['bar_code']線做什麼。這些都是字典中的關鍵字,而不是方法,所以只要讓他們自己在一條線上就什麼也不做。

其次,你讓這個過於複雜。下面的代碼在功能上是等效的,並且可能更具有以下功能:

def check_in_part_two(request): 
    if request.method == 'POST': 
     try: 
      part = Part.objects.get(bar_code=request.POST.get('bar_code')) 
     except Part.DoesNotExist: 
      form = PartForm(request.POST) 
     else: 
      form = PartForm(request.POST, instance=part) 

     if form.is_valid(): 
      form.save() 
      return http.HttpResponseRedirect('/current_count/') 

    else: 
     form = PartForm(initial={'status':3L, 'serial_number':'placeholder'}) 

    return render(request, 'add_part.html', { 
     'title':'Add Item', 
     'form': form, 
    }) 
+1

這些行用於早期打印,我剛剛忘記刪除它們:)。這工作!我想我的邏輯是一帆風順的。謝謝克里斯。 – 2012-08-13 21:46:05

+0

@Chris你的代碼幫了我大忙!瓜! – tilaprimera 2014-10-30 11:24:39

相關問題