Как обновить несколько объектов одной модели с помощью 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)
У вас есть идеи или лучшее / безопасное решение?
1 ответ
Решение
Временный объект кажется бессмысленным. Было бы проще обновить данные из очищенной формы напрямую:
Product.objects.update(**self.cleaned_data)