nda*_*nio 6 django django-forms
如何在旅途中在ModelForm中创建字段?
例如,我想创建3个文本框 (because there are 3 entries in the database table)
ID Name Value
------------------
1 Alpha 10
2 Beta 91
3 Char 800
Run Code Online (Sandbox Code Playgroud)
如何以这种方式向用户显示?它涉及_init定义吗?是否可以在模型表单类中执行for循环以检索其值并将其转换为要显示的字段?感谢任何建议.
Alpha [textbox] ______ Beta [textbox] ____ etc.. [Submit]
这是我在模型形式的def init中尝试做的事情:
self.fields['myfield'].widget = forms.Textarea()
Run Code Online (Sandbox Code Playgroud)
似乎无法给我输出,请记住我对某些django概念的微弱理解.
emy*_*ler 14
在这种情况下,我认为最好的办法是坚持使用模型表格.对于任何其他情况,您只需fields在表单内的属性中添加新字段即可__init__.
def __init__(self, *args, *kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields.update({
'foo': forms.CharField(widget=forms.Textarea()),
'bar': forms.CharField(widget=forms.Textarea()),
})
Run Code Online (Sandbox Code Playgroud)
请记住,在这种情况下,您必须首先调用父__init__项,因此您将拥有.fields可用项.
您还可以使用django.forms.models.ModelFormMetaclass(由django.forms.models.modelform_factory使用)动态定义表单字段.这将使用您指定的字段创建ModelForm类,而不是在init中更新"动态"字段.
from django import forms
from django.forms.models import ModelForm, ModelFormMetaclass
model = MyModel
fields = {
'myfield': forms.CharField(widget=forms.Textarea())
}
meta_attrs = {
'model': model,
}
Meta = type('Meta', (object, ), meta_attrs)
form_class_attrs = {
'Meta': Meta,
}
form_class_attrs.update(fields)
MyModelForm = ModelFormMetaclass('MyModelForm', (ModelForm, ), form_class_attrs)
Run Code Online (Sandbox Code Playgroud)
是的,你想覆盖__init__,比如:
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
for foo, bar in jelly:
self.fields[foo] = forms.CharField(widget=forms.Textarea())
Run Code Online (Sandbox Code Playgroud)
在这里查看更多信息- 这几乎也适用于 ModelForm。
| 归档时间: |
|
| 查看次数: |
7998 次 |
| 最近记录: |