как извлечь значения формы в django из базы данных?

#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