如何从数据库中提取django中的表单值?

时间:2011-11-02 11:57:28

标签: django

我正在开发一个项目,我使用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 shell运行它时,这个功能实际上有效,但每次我在服务器上尝试它我的错误页面:

/的TemplateSyntaxError 渲染时捕获ValueError:需要多于1个值才能解压缩。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

为什么使用字符串表示列表?当你可以使用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