Cor*_*ory 53 django django-forms
我试图根据一些信息预先填充我的django表单中的数据,但不使用ModelForm,所以我不能只设置实例.
这似乎应该很容易,但由于某种原因,我找不到任何文件告诉我如何做到这一点.这是我的表格:
class MyForm(forms.Form):
charfield1 = forms.CharField(max_length=3)
charfield2 = forms.CharField(max_length=3)
choicefield = forms.ModelChoiceField(MyModel.objects.all())
Run Code Online (Sandbox Code Playgroud)
我试过这样做:
form = MyForm()
form.charfield1 = "foo"
form.charfield2 = "bar"
# a model choice field
form.choicefield = MyModel.objects.get(id=3)
Run Code Online (Sandbox Code Playgroud)
这不起作用.
Aym*_*ieh 90
尝试:
form = MyForm({'charfield1': 'foo', 'charfield2': 'bar'})
Run Code Online (Sandbox Code Playgroud)
Form对象的构造函数可以使用字段值的字典.这将创建一个绑定表单,该表单可用于验证数据并将表单呈现为HTML并显示数据.有关更多详细信息,请参阅表单API文档.
编辑:
为了完整起见,如果您不想绑定表单,并且只想为某些字段声明初始值,则可以使用以下代码:
form = MyForm(initial={'charfield1': 'foo', 'charfield2': 'bar'})
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅初始值的文档.
Dan*_*man 26
填充Django表单有两种方法.
第一种是在实例化时将字典作为第一个参数传递(或者将其作为datakwarg传递,这是相同的事情).当您要使用POST数据填充和验证表单时,可以执行此操作.
data_dict = {'charfield1': 'data1', 'charfield2': 'data2', 'choicefield': 3}
form = MyForm(data_dict)
Run Code Online (Sandbox Code Playgroud)
但是,这将触发表单上的验证,因此只有在您实际传入有效且完整的数据时才有效 - 否则您将从错误开始.
填充表单的另一种方法是使用initial参数(此处记录).这使初始值的表单字段,但并不会触发验证.因此,如果您没有填写所有值,那么它是合适的.
form = MyForm(initial=data_dict)
Run Code Online (Sandbox Code Playgroud)
要填充选择字段initial,请使用pk值.
And*_*der 14
您可以使用model_to_dict()将实例转换为字典,然后使用该表单填充表单.这样的事情应该有效:
from django.forms.models import model_to_dict
...
my_obj = MyModel.objects.get(abc=123)
form = MyForm(initial=model_to_dict(my_obj))
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用django 1.3版
对于它的价值,FormView基于类的视图方法是覆盖FormView的get_initial函数。get_initial返回用于get_form_kwargs实例化表单的初始关键字参数。
文档:
示例代码:
from django.views.generic.edit import FormView
class MyFormView(FormView):
def get_initial(self):
initial = super(MyFormView, self).get_initial()
# update initial field defaults with custom set default values:
initial.update({'charfield1': 'foo', 'charfield2': 'bar'})
return initial
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31638 次 |
| 最近记录: |