Thi*_*Lam 17 django django-forms
我想Meta.fields动态更新.是否可以从Form构造函数中执行此操作?我尝试了以下但year在表单生成期间没有显示.只有name和title显示.
class Author(models.Model):
name = ...
title = ...
year = ...
class PartialAuthorForm(ModelForm):
class Meta:
model = Author
fields = ('name', 'title')
def __init__(self, *args, **kwargs):
self.Meta.fields += ('year',)
Run Code Online (Sandbox Code Playgroud)
Dan*_*man 17
不,那不行.在您到达之前,Meta被 - 令人惊讶地 - 解析了元类__init__.
执行此操作的方法是手动将字段添加到self.fields:
def __init__(self, *args, **kwargs):
super(PartialAuthorForm, self).__init__(*args, **kwargs)
self.fields['year'] = forms.CharField(whatever)
Run Code Online (Sandbox Code Playgroud)
mko*_*nen 14
其他人的答案很棒(特别是@BranHandley's),但有时,最容易有条件地删除一些东西.显然,这不适用于动态创建的内容,但如果您只需要选择包含一个字段,那么请尝试这样做.
class MyModelForm(ModelForm):
class Meta:
model = MyModel
fields = ['normalField', 'conditionalField', ]
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
if condition is True:
del self.fields['conditionalField']
Run Code Online (Sandbox Code Playgroud)
如上所述,以另一种方式进行操作可能相当复杂,但有条件地降低它是非常简单的.=)
| 归档时间: |
|
| 查看次数: |
8076 次 |
| 最近记录: |