Я пытаюсь отправить динамическое количество выбранных флажков на obj.html функции / items. Я получаю ошибку
"Select a valid choice. 1234 is not one of the available choices."
Но вы заметите, что я печатаю набор запросов из # views.py, он выводит, что 1234 содержится в плоском наборе запросов, с кавычками.
print(form.fields['choices'].queryset)
# Console output
['1234', '1243',...]
Почему 1234 не является одним из доступных вариантов? Я пробовал заключить в кавычки атрибут значения в форме ввода, но это не сработало. Функция items останавливается, потому что данные недействительны. Как я могу это решить?
# forms.py
class ItemForm(forms.Form):
choices = forms.ModelMultipleChoiceField(widget = forms.CheckboxSelectMultiple,
queryset = Sampledata.objects.none())
# views.py
def obj(request, object_id,):
data = Sampledata.objects.filter(id=object_id)
form = ItemForm()
form.fields['choices'].queryset = list(data.values_list('value', flat=True))
print(form.fields['choices'].queryset)
return render(request, 'obj.html', {'data':data,'form':form})
def items(request):
if request.method == 'POST':
form = ItemForm(request.POST)
# check whether it's valid:
if form.is_valid():
...
# obj.html
<form action = "/items" method = "post">
# Many of these spread out throughout the page
{% for obj in data %}
<input type = "checkbox" name = "choices" value = "{{obj.value}}">
{% endfor %}
<input type = "submit" value = "Submit">
Обновлено, но по-прежнему возникает та же ошибка:
def items(request, object_id):
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = ItemForm(request.POST)
data = Sampledata.objects.filter(id=object_id)
form.fields['choices'].queryset = (data.values_list('value', flat=True))
# check whether it's valid:
if form.is_valid():
@DanielRoseman Так вы говорите, что мне нужно добавить form.fields['choices'].queryset = list(data.values_list('value', flat=True)) в def items?
Или, еще лучше, сделайте их одним видом. Почему они разделены? Кроме того, этот код должен действительно существовать в самой форме, в методе __init__; но вам все равно нужно будет передать object_id, так что еще лучше сделать его одним единственным представлением. (И отдельно, почему вы все это делаете с values_list? Атрибут queryset просто должен быть набором запросов.)
@DanielRoseman Я сделал их отдельными, потому что obj.html зависит от предыдущей формы, которая также является динамической. Я понимаю вашу точку зрения, и я пересмотрю свое решение. Значение, которое выбирает пользователь, является одним из многих атрибутов в Object, поэтому я решил использовать values_list, чтобы получить набор запросов этих значений. Разве это не так? Я переместил значение набора запросов в элементы и получаю ту же ошибку






Но вы модифицируете его в
obj, а обрабатываете вitems. Это два отдельных представления и два отдельных экземпляра ItemForm.