Django将数据从db设置为字段

时间:2011-02-09 13:37:58

标签: django webforms django-views

我正在尝试用数据库中的值填充两个<input type="text">字段,并使用默认的django表单。

我尝试使用查询设置它,但它在启动时获取值,并且在更改值为DB后不会从DB获取它。

我的表单如下:

s_size = forms.IntegerField(initial=Sizes.objects.get(id=1).small)
m_size = forms.IntegerField(initial=Sizes.objects.get(id=1).medium)

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您应该从视图中传递初始数据,如in the documentation所述:

class MyForm(forms.Form):
    s_size = forms.IntegerField(i)
    m_size = forms.IntegerField()

...

def my_view(request):
    s_size_value = Sizes.objects.get(id=1).small
    m_size_value = Sizes.objects.get(id=1).medium
    form = MyForm(initial={'s_size': s_size_value, 'm_size': m_size_value})

答案 1 :(得分:0)

您需要为每个请求创建表单类。

def my_form_factory():
    class my_form(forms.Form):
        s_size = forms.IntegerField(initial=Sizes.objects.get(id=1).small)
        m_size = forms.IntegerField(initial=Sizes.objects.get(id=1).medium)
        ...
    return my_form()

def my_view(request):
    form=my_form_factory()

其他解决方案 - 通过self.fields字典更新表单__init__()方法中的表单字段:

class my_form(forms.Form):
    __init__(*args, **kwargs):
        super(my_form, self).__init__(*args, **kwargs)
        self.fields['s_size']=forms.IntegerField(initial=Sizes.objects.get(id=1).small)
        self.fields['m_size']=forms.IntegerField(initial=Sizes.objects.get(id=1).medium)