2012-08-13 70 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

相关问题