Передача значений по умолчанию в несвязанную форму django
У меня есть два класса select, которые я пытаюсь создать в несвязанной форме. Выбранные данные имеют отношение только к представлению, которое создается в представлении, поэтому являются отбрасываемыми и не нуждаются в сохранении в модели.
Проблема, с которой я столкнулся, заключается в том, что я могу передать списки полей в порядке, но как мне установить "по умолчанию" проверенные / выбранные значения, чтобы форма стала "связанной"?
views.py
def cards(request):
sort_name = []
sort_name.append("Alphabetic Order")
sort_name.append("Most Popular")
sort_name.append("Least Popular")
sort_name.append("Highest Win Rate")
sort_name.append("Lowest Win Rate")
sort_id = range(len(sort_name))
sort_list = list(zip(sort_id, sort_name))
<more code to make filt_list and zip it>
if request.method == 'POST':
form = cardStatsForm(request.POST, sortList=sort_list, filtList=filt_list)
if form.is_valid():
do something
else:
do something else
else:
form = cardStatsForm(filter_list, sort_list)
forms.py
class cardStatsForm(forms.Form):
def __init__(self, filterList, sortList, *args, **kwargs):
super(cardStatsForm, self).__init__(*args, **kwargs)
self.fields['filts'].choices = filterList
self.fields['filts'].label = "Select player rankings for inclusion in statistics:"
self.fields['sorts'].choices = sortList
self.fields['sorts'].label = "Choose a sort order:"
filts = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=(), required=True)
sorts = forms.ChoiceField(choices=(), required=True)
Трудность в том, что форма не проходит тест "is_valid", поскольку она не связана, и у меня есть параметр "required=true" (чтобы пользователь должен выбрать флажок / выбрать значение), но я не могу применить логику, поскольку кажется, что форма никогда не "связана".
Вы можете использовать django forms validation или передать значение defult в вашем views.py. Это вернет несвязанные формы, если значение не совпадает с вашим значением по умолчанию.
покажем вам, как это сделать в вашем views.py:
error_message = None
default_value = "jhone"
if form.is_valid():
name = request.POST['name']
defult_name = jhone
if defult_name != name:
error_message = 'Name must be jhone'
if not error_message:
form.save() #it will only save forms if default value match
else:
do something else
context = {'error_message':error_message,
'default_value': default_value,
'form':form,
} #pass the context in your html template for showing default value and error message
в вашем .html
{{error_message}}
<input type=text name='name' {%if form.is_bound %} value="{{default_value}} {%endif%}">
Я смог исправить свою проблему, добавив "inital=0" и изменив вызов формы, как описано ниже:
forms.py
filts = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=(), initial=0, required=True)
sorts = forms.ChoiceField(choices=(), initial=0, required=True)
views.py
if request.method == 'POST':
form = cardStatsForm(data=request.POST, sortList=sort_list, filterList=filter_list)
else:
form = cardStatsForm(filter_list, sort_list)