让我们来看一下我的模型:
class Example(models.Model):
name = models.CharField(max_length=40)
我希望其表单具有字段' name'的初始值,因此它可能是:
class ExampleForm(forms.ModelForm):
name = forms.CharField(initial="initial_name")
这个简单的例子很有用,但是如果我有更复杂的ModelFields(即有覆盖的小部件),我在重新分配字段时会错过所有的名字'使用基本的forms.CharField
。
我的问题:有没有办法在Meta类中设置首字母,就像小部件一样?类似......
class ExampleForm(forms.ModelForm):
class Meta:
initials = {
'name': 'initial_name',
}
答案 0 :(得分:2)
这些是我要结帐的选项:
这是最基本的方法。在views.py中,只需使用initial
关键字参数提供数据。
<强> views.py 强>
from forms import ExampleForm
INITIAL_DATA = {'name': 'initial_name'}
def my_view(request):
...
form = ExampleForm(initial=INITIAL_DATA)
...
不太狡猾。唯一的缺点是如果你使用和滥用这种形式并厌倦了传递初始数据。
__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={...}
。