Django表单不显示特定的输入

2024-09-27 17:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的模型:

class Fleet(models.Model):
    user = models.ForeignKey(User)
    [...]
    ship1 = models.IntegerField(default=0)
    ship2 = models.IntegerField(default=0)
    ship3 = models.IntegerField(default=0)
    ship4 = models.IntegerField(default=0)

还有一个表格:

^{pr2}$

如果用户没有可用的'ships'(即在舰队模型中=0),我如何使表单中的字段隐藏?在


Tags: 模型defaultmodelmodelsclass表格foreignkeyintegerfield
2条回答

这个问题似乎可以通过在不同的舰队之间使用ManyToManyField来解决,或者使用ForeignKey从一个船到另一个Form,然后在表单中简单地使用一个ModelMultipleChoiceField。。。但也许有些事情我不明白。在

不管怎样,多回波场可能比这组积分场要好。这基本上就是多回波场的作用。在

您可以重写表单中的visible_fields(或者hidden_fields,如果您真的需要隐藏字段)方法,将它们标记为“不可见”(或隐藏输入)。有关详细信息,请参阅docs。在

编辑:像这样的东西应该有用。。。在

class sendFleet(forms.Form):
    [...]
    ship1 = forms.IntegerField(initial=0)
    ship2 = forms.IntegerField(initial=0)

    def visible_fields(self):
        # create a list of fields you don't want to display
        invisibles = []
        if self.instance.ship1 == 0:
            invisibles.append(self.fields['ship1'])

        # remove fields from the list of visible fields
        visibles = super(MailForm, self).visible_fields()
        return [v for v in visibles if v.field not in invisibles]

然后在模板中:

^{pr2}$

相关问题 更多 >

    热门问题