как вытащить значения формы в Django из базы данных? - PullRequest
0 голосов
/ 02 ноября 2011

В настоящее время я работаю над проектом, и я разработал форму, используя класс формы django, проблема в том, что я хочу, чтобы ChoiceField из класса формы извлекал значение из моей базы данных. я написал такую ​​функцию:

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 at / Ошибка при выводе значения ValueError: для распаковки нужно более 1 значения.

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Почему вы используете строки для представления списка? Это довольно странно, когда вы можете использовать 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). Если вам нужны динамические значения, более подходящее место для этого - функция init формы.

class MyForm(..):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['category'].choices = my_choices
1 голос
/ 02 ноября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...