2010-07-27 2 views
2

I이 뷰에서 다음 코드를 내 모델에서는 해당 formset는 업데이트하는 대신 새 항목을 작성

def controller_details(request, object_id): 
    controller = Controller.objects.get(pk=object_id) 
    controllerURI = controller.protocol + '://' + controller.server + '/' + controller.name 

    FilterFormSet = inlineformset_factory(Controller, Filter, extra=2) 

    if request.method == 'POST': 
     formset = FilterFormSet(request.POST, request.FILES, instance=controller) 
     if formset.is_valid(): 
      formset.save() 
     else: 
      HttpResponseRedirect('controller-details') 
    else: 
     formset = FilterFormSet(instance=controller) 

    return render_to_response('controller_details.html', {'formset':formset, 'controllerURI':controllerURI}, context_instance=RequestContext(request)) 

하나의 컨트롤러가 여러 필터 (일대)로 구성되어 다른 필터를 가질 수 있습니다 각각의 필터 (자기 자신에 대해 하나에서 여러개로) 그 산출을위한 표적으로. 특정 필터에 대한 대상을 업데이트하려고 할 때 대상 값을 업데이트하는 대신 전체적으로 새로운 항목을 얻습니다. 다음은 모델의 일부입니다.

미리 감사드립니다.

답변

1

마지막으로 알아 냈습니다. 유사한 문제가있는 사람들을위한 해결책 :

controller = Controller.objects.get(pk=object_id) 
controllerURI = controller.protocol + '://' + controller.server + '/' + controller.name 
FilterFormSet = inlineformset_factory(Controller, Filter, extra=5) 

if request.method == 'POST': 
    formset = FilterFormSet(request.POST, request.FILES, instance=controller) 

    if formset.is_valid(): 
     instances = formset.save(commit=False) 

     for instance in instances: 
      instance.save() 

formset = FilterFormSet(instance=controller) 

return render_to_response('controller_details.html', {'formset':formset, 'controllerURI':controllerURI}, context_instance=RequestContext(request)) 
+0

"좋은"방법인지는 모르겠지만 두 가지 코드를 비교하고 싶지 않은 분은 formset.save()를 수행하는 동안 Przemek은 save (commit = False)로 인스턴스를 가져 와서 각 인스턴스를 저장했습니다. 나는 지금 나 자신을 위해 이것을 시도하고있다. 솔루션 Przemek을 게시 해 주셔서 감사합니다. – KobeJohn

관련 문제