2012-08-13 2 views
1

나는이 문제를 몇 시간 동안 파고 있었고이 문제로 인해 터널이났다. 이보기는 두 가지 조작을 수행해야합니다. 주먹과 작업 작업은 제출 된 양식 데이터로 개체를 만드는 것입니다. 두 번째 작업은 고유 필드 'bar_code'를 기반으로 '상태'필드를 업데이트하는 것입니다. 처음 저장 한 후 고유 한 특성 "% 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'] 선 무슨 일을하는지 모른다. 그것들은 메소드가 아니라, dict의 키입니다. 그래서 라인에서 독자적으로 사용하는 것은 아무 것도하지 않습니다.

둘째, 너무 복잡합니다. 다음 코드는 기능상으로 동등하고 더 기능적 일 수 있습니다.

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

이러한 줄은 인쇄하기 전에 사용되었습니다. 나는 그 (것)들을 제거하는 것을 잊었습니다. :). 이 작품! 내 논리가 그저 멀어진 것 같아. 크리스. 고마워. –

+0

@Chris 당신의 코드는 나를 도왔습니다! 멜론! – tilaprimera

관련 문제