#django
#django
Вопрос:
в настоящее время я работаю над проектом, и я разработал свою форму с использованием класса django form, проблема в том, что я хочу, чтобы поле выбора из класса form извлекало значение выбора из моей базы данных. я написал такую функцию, как эта:
from django import forms
from django.forms.widgets import Select
from django.forms.fields import ChoiceField
import datetime
from mystore.store.models import categories
def header_search():
cat_values = ""
cats_list = categories.objects.all().order_by('category', 'values')
for cat in cats_list:
cat_values = "('%s', '%s'),"%(cat.values, cat.values)
return cat_values
mylist = header_search()
CATEGORY_CHOICES = (mylist)
class headersearch(forms.Form):
kywords = forms.CharField(max_length = 100)
category = forms.ChoiceField(widget=forms.Select, choices=CATEGORY_CHOICES)
эта функция действительно работала, когда я запускал ее с помощью manage.py оболочка, но каждый раз, когда я пробую это через сервер, я открываю страницу ошибок:
TemplateSyntaxError при / обнаружении ошибки значения во время рендеринга: для распаковки требуется более 1 значения.
Ответ №1:
Комментарии:
1. Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки.
Ответ №2:
Почему вы используете строки для представления списка? Это довольно странно, когда вы могли бы использовать python.
Вы list(my_list)
должны просто возвращать список из X символов. list('abcd')
результаты ['a', 'b', 'c', 'd']
.
choices
ожидает список кортежей. Просто измените свой код, чтобы возвращать список кортежей вместо строкового представления списка кортежей.
def header_search():
cat_values = []
cats_list = categories.objects.all().order_by('category', 'values')
for cat in cats_list:
cat_values.append((cat.values, cat.values))
return cat_values
PS: с помощью этого метода ваш выбор будет заполнен только один раз (при загрузке django). Если вам нужны динамические значения, более подходящее место для этого — функция инициализации формы.
class MyForm(..):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['category'].choices = my_choices