在 Form Meta 类中设置初始值
Posted
技术标签:
【中文标题】在 Form Meta 类中设置初始值【英文标题】:Setting initial values in Form Meta class 【发布时间】:2014-05-15 20:25:41 【问题描述】:假设我有以下模型:
class Example(models.Model):
name = models.CharField(max_length=40)
我希望它的表单具有字段“名称”的初始值,所以它可以是:
class ExampleForm(forms.ModelForm):
name = forms.CharField(initial="initial_name")
这对于这个简单的示例来说已经足够了,但如果我有更复杂的 ModelFields(即带有覆盖的小部件),我在使用基本的 forms.CharField
重新分配字段“名称”时会丢失所有内容。
我的问题:有没有办法在 Meta 类中设置首字母,就像小部件一样?类似...
class ExampleForm(forms.ModelForm):
class Meta:
initials =
'name': 'initial_name',
【问题讨论】:
【参考方案1】:这些是我要检查的选项:
选项 1:在实例化表单时提供初始表单数据。
这是最基本的方法。在您的 views.py 中,只需使用 initial
关键字参数提供数据。
views.py
from forms import ExampleForm
INITIAL_DATA = 'name': 'initial_name'
def my_view(request):
...
form = ExampleForm(initial=INITIAL_DATA)
...
不太难。唯一的缺点是如果您使用和滥用该表单并且厌倦了传递初始数据。
选项 2(适合您的情况):在类的 __init__
方法中提供初始数据。
Django 中的表单旨在在实例化时接受初始数据,因此您可以在 __init__
方法中处理这些值。未经测试,这是我想象的样子:
forms.py
class ExampleForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
"""If no initial data, provide some defaults."""
initial = kwargs.get('initial', )
initial['name'] = 'initial_name'
kwargs['initial'] = initial
super(ExampleForm, self).__init__(*args, **kwargs)
这将是最佳选择,因为您可以忽略视图代码中的initial=...
。
【讨论】:
以上是关于在 Form Meta 类中设置初始值的主要内容,如果未能解决你的问题,请参考以下文章
在Jquery Datepicker中设置日期的初始值[重复]