我希望有一个表单,只有将字段留空时才填充字段进行编辑。例如:
class UserEditConcert(forms.ModelForm):
class Meta:
model = models.Concert
fields = (
'genres',
)
if not model.time:
fields += ('time',)
if model.age == "Unknown":
fields += ('age',)
我的if语句都没有用。我的语法错了还是因为其他原因而无效?
答案 0 :(得分:1)
首先,if
语句实际上是。但是您的model.time
会获得模型上的字段。所以Concert.time
。 Concert.time
实际上返回一个描述该列的实例(很可能是一个models.DateTimeField
)。 DateTimeField
具有真实性True
,因此第一个if
子句的正文不会触发。在第二种情况下发生几乎相同的程序。 Concert.age
返回一些字段,该字段不等于字符串"Unknown"
。
现在我们可以通过动态添加或删除__init__
函数中的字段来解决问题。我认为删除字段可能更好。从那时起,我们不必添加大量的过程逻辑来指定字段,小部件等。
我们可以这样写:
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')
我们添加一些测试来指定何时从表单中删除某些字段。