如何使用 ModelForm 更新同一模型的多个对象?
How to update multiple objects of the same model using ModelForm?
我的项目中有多个 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)
您有什么想法或better/safer解决方案吗?
临时对象似乎毫无意义。直接从表单的清理数据更新会更容易:
Product.objects.update(**self.cleaned_data)
我的项目中有多个 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)
您有什么想法或better/safer解决方案吗?
临时对象似乎毫无意义。直接从表单的清理数据更新会更容易:
Product.objects.update(**self.cleaned_data)