Django 表单集创建新条目而不是更新

Django 表单集创建新条目而不是更新,django,django-models,django-forms,Django,Django Models,Django Forms,我的视图中有以下代码: def controller_details(request, object_id): controller = Controller.objects.get(pk=object_id) controllerURI = controller.protocol + '://' + controller.server + '/' + controller.name FilterFormSet = inlineformset_factory(Contr

我的视图中有以下代码:

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

提前谢谢。

终于明白了。对于那些可能有类似问题的人,解决方案如下:

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))
我不知道这是否是一种“好”的方法,但对于那些不想比较两组代码的人,而不是只做formset.save(),Przemek使用save(commit=False)获取实例,然后保存每个实例。我现在正在为自己尝试。感谢您发布您的解决方案Przemek。