Отправка дополнительных данных для инициализации формы
Итак, я создаю объект формы, используя данные request.POST, но хочу инициализировать дополнительные поля, используя другие значения. Вот что я пробовал, но это не работает:
#forms.py
class InputForm3(forms.Form):
url = forms.URLField(required=True)
db = forms.CharField(required=False)
wks = forms.CharField(required=True, initial="Sheet1")
table = forms.CharField(required=False, initial="test_table")
def __init__(self, wks, *args, **kwargs):
self.wks=wks
super().__init__(*args, **kwargs)
self.cleaned_data = None
def clean(self):
self.cleaned_data = super().clean()
print("FORM3 cleaned_data : ", self.cleaned_data)
#views.py
form3=InputForm3(wks="Sheet1", data= request.POST)
if form3.is_valid:
#remaining code
#output
FORM3 cleaned_data : {'url': 'https://randomurl.com', 'db': 'testdb', 'table': ''}
поля 'url' и 'db' присутствуют непосредственно в request.POST, КАК ИНИЦИАЛИЗИРОВАТЬ ДРУГИЕ ПОЛЯ, ПОМОГИТЕ!
Не уверен в контексте того, почему вы хотите это сделать.
Но, возможно, вы можете попробовать скопировать data
формы после того, как вы инициализировали форму с помощью request.POST
data
. У вас будет доступ к изменению скопированного data
. Например:
Если вы используете function-based view
:
def view_name(request):
form3 = InputForm3(request.POST)
if request.method == "POST":
form3 = InputForm3(data=request.POST) # removing wks from the parameter here...
# assigning the copied collection of data to the form's data so we can modify it
form3.data = form3.data.copy()
form3.data['wks'] = 'Sheet1' # or whatever name you wish to name that wk
if form3.is_valid():
# remaining code
...
Если вы используете class-based view
:
def post(self, request, *args, **kwargs):
form3 = InputForm3(data=request.POST)
form3.data = form3.data.copy()
form3.data['wks'] = 'Sheet1'
if form3.is_valid():
# remaining code
...
Это сработало для меня.