Присвоение значения скрытого поля Django forms с помощью var после 'forms.is_valid()' не сохраняет его
У меня есть форма со скрытым входом social_color, в который я ничего не хочу вводить, мне нужно, чтобы этот вход присваивал значение после проверки содержимого формы, чтобы использовать содержимое одного из полей, чтобы сделать что-то, а затем присвоить результаты скрытому входу.
Согласно этому ответу: https://stackoverflow.com/a/813474/15352101
Я могу просто сделать :
if form.is_valid():
form.cleaned_data['Email'] = GetEmailString()
но для меня использование :
form.cleaned_data["social_color"] = icon_main_color
icon_main_color это результат того, что мне пришлось сделать, это кортеж, содержащий 3 значения, но когда я проверяю созданный объект с помощью формы, значение social_color остается пустым.
В django для этого используется способ instance=form.save(commit=False):
def post(self, request, *args, **kwargs):
payload = json.loads(request.body.decode())
form = SocialCreationForm(payload)
if form.is_valid():
# Quick binds
social_name = form.cleaned_data["social_name"]
social_icon = form.cleaned_data["social_icon"]
# blah blah ...
icon_main_color = get_colors(icon_save_path)[0]
instance=form.save(commit=False) #<--- HERE!!
if icon_main_color is not None:
instance.social_color = icon_main_color #<--- AND HERE!!
instance.save() #<--- AND HERE!!
return redirect("/")
Квотинг Создание форм из моделей docs:
Если вы вызовете save() с commit=False, то она вернет объект, который еще не был сохранен в базе данных. В этом случае вы сами должны вызвать save() для полученного экземпляра модели. Это полезно, если вы хотите выполнить пользовательскую обработку объекта перед его сохранением, или если вы хотите использовать один из специализированных вариантов сохранения модели. По умолчанию commit = True.