Django 仅当模型字段为空时才将字段添加到表单
我希望有一个表单,只在字段留空时填充要编辑的字段。例如:Django 仅当模型字段为空时才将字段添加到表单,django,django-models,django-forms,Django,Django Models,Django Forms,我希望有一个表单,只在字段留空时填充要编辑的字段。例如: class UserEditConcert(forms.ModelForm): class Meta: model = models.Concert fields = ( 'genres', ) if not model.time: fields += ('time',) if model.age ==
class UserEditConcert(forms.ModelForm):
class Meta:
model = models.Concert
fields = (
'genres',
)
if not model.time:
fields += ('time',)
if model.age == "Unknown":
fields += ('age',)
我的if语句都不起作用。我的语法是错误的还是因为其他原因不起作用 首先,事实上执行了
if
语句。但是您的model.time
会获得模型上的字段。所以Concert.time
Concert.time
实际上返回了一个描述列的实例(很可能是models.DateTimeField
)。该DateTimeField
具有真实性True
,因此第一个if
子句的主体不会触发。在第二种情况下,发生了几乎相同的过程Concert.age
返回一些字段,该字段不等于字符串“Unknown”
但是,现在我们可以通过在\uuuu init\uuu
函数中动态添加或删除字段来解决这个问题。我认为删除字段可能更好。从那时起,我们不必添加很多过程逻辑来指定字段、小部件等
我们可以这样写:
class UserEditConcert(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(UserEditConcert, self).__init__(*args, **kwargs)
if self.instance.time:
del self.fields['time']
if self.instance.age != "Unknown":
del self.fields['age']
class Meta:
model = models.Concert
fields = ('genres', 'time', 'age')
class UserEditConcert(forms.ModelForm):
定义初始化(self,*args,**kwargs):
super(UserEditConcert,self)。\uuuuuu初始化(*args,**kwargs)
如果self.instance.time:
del self.fields['time']
如果self.instance.age!=“未知”:
del self.fields['age']
类元:
模型=模型。音乐会
字段=(‘类型’、‘时间’、‘年龄’)
我们添加了一些测试,以指定何时从表单中删除某些字段。它们可以正常工作,但是
model。type
是模型字段,而不是实例字段。感谢您的回复。是否可以在表单类中检查实例,或者我是否需要在视图中进行检查?谢谢,这非常有帮助。不幸的是,我仍然得到一个NameError,表明实例没有定义。这是从我的观点,所以我不知道为什么*args应该会处理好的,对吗?@Danny:对不起,忘了自己。举个例子。先生,你是个坏蛋。我非常感谢你在这方面的帮助。