覆盖Django inlineformset_factory has_changed()以始终返回True

时间:2010-05-13 08:44:39

标签: django django-forms

我正在使用django inlineformset_factory函数。

a = get_object_or_404(ModelA, pk=id)

FormSet = inlineformset_factory(ModelA, ModelB)
if request.method == 'POST':
    metaform = FormSet (instance=a, data=request.POST)

    if metaform.is_valid():
        f = metaform.save(commit=False)

        for instance in f:
           instance.updated_by = request.user
           instance.save()
else:
    metaform = FormSet(instance=a)

return render_to_response('nodes/form.html', {'form':metaform})

发生的事情是,如果我更改任何数据,那么一切正常,所有数据都会更新。但是,如果我不更改任何数据,则不会更新数据。即只有被改变的条目才能通过for循环保存。我想这是有道理的,因为如果没有改变,没有保存数据的点。但是,我需要通过并保存表单中的每个对象,无论它是否有任何更改。

所以我的问题是如何覆盖它以便它通过并保存每条记录是否有任何变化?

希望这是有道理的

由于

2 个答案:

答案 0 :(得分:3)

我认为

inlineformset_factory可以采用表单对象。我相信你能做的是创建一个forms.ModelForm,然后添加一个像 always_update = forms.IntegerField(required=False) 然后在__init__函数中执行self.fields['always_update'].initial = int(time.time())之类的操作。我相信这会迫使它更新,但你必须对此进行测试。

答案 1 :(得分:0)

如果updated_by字段对于与特定ModelA实例相关的每个Model实例总是相同的,那么您不应该只将它存储在父项而不是每个子项上吗?