2010-07-27 70 views
2

我有一個觀點如下代碼:表單集創建新條目,而不是更新的

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)) 

在我的模型中的單個控制器由多個過濾器(一對多),每個過濾器可以有另一個過濾器作爲其產出的目標(自我一對多)。當我嘗試更新特定過濾器的目標時,而不是更新目標值,我會得到一個新的條目。這裏是模型的部分看起來像:

class Filter(Component): 
controller = models.ForeignKey(Controller) 
targetURI = models.ForeignKey('self', verbose_name='Target URI', null=True, blank=True) 
filterType = models.CharField('Type', max_length=64, choices=FILTER_TYPES,) 
firstFilter = models.BooleanField('First Filter') 

在此先感謝。

回答

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得到的實例保存(提交= False),然後保存每個實例。我現在正在爲自己嘗試這個。感謝您發佈您的解決方案Przemek。 – KobeJohn 2011-10-26 07:13:02

相關問題