如何使用ModelForm更新同一模型的多个对象?

时间:2017-05-29 10:17:32

标签: django django-models django-forms django-1.10

我的项目中有多个Product个对象。我想创建一个一次更新所有Product个对象的表单。由于Product有许多属性,我想花一些时间并使用ModelForm来做,但我无法弄清楚如何做到这一点。

因此我没有想要更新的特定对象,而是有很多这些对象,但我想为所有对象设置相同的属性,但不要更改id(以及另一个字段 - OneToOne )。

我认为这可能是一种解决方案,但无法完成save方法。

class UpdateMultipleProductObjects(forms.ModelForm):

    class Meta:
        model = Product
        fields = '__all__'
        exclude = ['id',...]

    def save(self, *args, **kwargs):
        temporary_object = super(UpdateMultipleProductObjects,self).save(commit=False,*args,*kwargs)
        update_dict = {x.name : getattr(temporary_object,x.name) for x in temporary_object ._meta.fields if x.name not in ['id',...]}
        Product.objects.all().update(**update_dict)

您有任何想法或更好/更安全的解决方案吗?

1 个答案:

答案 0 :(得分:1)

临时对象似乎毫无意义。从表单的清理数据直接更新会更容易:

Product.objects.update(**self.cleaned_data)