Как динамически обновлять измененные поля модели
Допустим, у меня есть модель Project
. Модель Project
имеет > 100 полей.
Я могу создавать новые Projects
из front-end с помощью форм.
Когда я хочу отредактировать/обновить некоторое поле Project
в back-end, я делаю что-то вроде этого (усечено):
def edit_project(request):
if request.method == 'POST':
project_to_edit = Project.objects.get(pk=request.POST['project_id'])
project_to_edit.description = request.POST['description']
project_to_edit.name = request.POST['name']
#repeat the same process for each field...(>50)
project_to_edit.save()
return redirect('project_page/')
return redirect('index')
Проблема в том, что в модель Projects
постоянно добавляются новые поля.
Существует ли динамический/питонический способ обновления каждого поля в модели без необходимости делать это "вручную" для каждого поля и экономить строки кода?
Я думаю, что это правильный путь.
Вы можете динамически обновлять поля следующим образом:
def edit_project(request):
if request.method == 'POST':
project_to_edit = Project.objects.get(pk=request.POST['project_id'])
for field in self.fields:
project_to_edit.description = request.POST[field]
project_to_edit.name = request.POST[field]
#repeat the same process for each field...(>50)
project_to_edit.save()
return redirect('project_page/')
return redirect('index')
P.S. Вы должны использовать form.clean_data для доступа к данным формы, а не непосредственно к отправленным данным. Modelform решит ваши проблемы https://docs.djangoproject.com/en/4.0/topics/forms/modelforms/