表单创建新条目而不是更新 [英] Formset Creating New Entries Instead of Updating

查看:95
本文介绍了表单创建新条目而不是更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在视图中有以下代码:

I have the following code in a view:

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

在我的模型中,单个控制器由多个过滤器组成(一个到多个),并且每个过滤器可以将另一个过滤器作为其输出的目标(一个到多个自身)。当我尝试更新一个特定的过滤器的目标,而不是更新目标值,我得到一个整个新的条目。这是模型的一部分:

In my model a single Controller is made up of multiple Filters (one to many) and each Filter can have another Filter as a target for its output (one to many on self). When I try to update the target for a particular Filter, instead of updating the target value I get an entire new entry. Here is what part of the model looks like:

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

感谢

推荐答案

最后弄清楚了。对于可能有类似问题的解决方案:

Finally figured it out. Solution below for those that may have similar problem:

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

这篇关于表单创建新条目而不是更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆