Как обновить несколько объектов одной модели с помощью 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)
Другие вопросы по тегам