【问题标题】:how to pull form values in django from a database?如何从数据库中提取 django 中的表单值?
【发布时间】:2011-11-02 11:57:27
【问题描述】:

我目前正在做一个项目,我使用 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 个值才能解包。

【问题讨论】:

    标签: django


    【解决方案1】:

    【讨论】:

    • 虽然理论上可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
    【解决方案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 加载)。如果您想要动态值,则更合适的位置是表单 init 函数。

    class MyForm(..):
        def __init__(self, *args, **kwargs):
            super(MyForm, self).__init__(*args, **kwargs)
            self.fields['category'].choices = my_choices
    

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 2018-05-08
      • 2020-08-30
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多