仅当模型字段为空时才将字段添加到表单中

时间:2018-05-25 17:05:47

标签: 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 == "Unknown":
            fields += ('age',)

我的if语句都没有用。我的语法错了还是因为其他原因而无效?

1 个答案:

答案 0 :(得分:1)

首先,if语句实际上是。但是您的model.time会获得模型上的字段。所以Concert.timeConcert.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')

我们添加一些测试来指定何时从表单中删除某些字段。