2012-03-09 95 views
0

我想从模型表单的选项中删除非选择的选项。Django的选择非选择字段

我的模型字段声明:

priority = models.IntegerField(choices=PRIORITIES_CHOICES) 

我的表单代码:

class TaskForm(ModelForm): 
def __init__(self, *args, **kwargs): 
    super(TaskForm, self).__init__(*args, **kwargs) 

    self.fields['priority'].required = True; 

然而,未选择的领域并不想离开。 (我正在谈论------选项)。

有什么想法?

+0

我想你也可以指定一个默认值,在这种情况下,它是self.fields ['priority']。initial = “somevalue”和Django不会添加一个EM pty选项 – Paulo 2012-03-10 08:25:42

+0

嗯,它确实添加了-----选项,其初始值为:( – 2012-03-10 08:47:51

回答

1

尝试:

class TaskForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(TaskForm, self).__init__(*args, **kwargs) 

     self.fields['priority'].choices = self.fields['priority'].choices[1:] 
+0

它确实有效,但是有没有更好的方法来实现它?它基于运气(第一行是“------”)。 – 2012-03-10 08:32:13

+0

这不是运气。它会永远是第一个选项,除非你自己改变它出于某种原因 – 2012-03-10 12:26:53

+0

或者他们可能会改变它在下一个Django版本:)我认为这是一个有效的解决方案,但我宁愿做它的“Django”的方式。 (如果有的话) – 2012-03-10 16:11:24

0

如果任何人仍在疑虑如何做到这一点在Django 1.5 +,在 “Django的方式”:

class TaskForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(TaskForm, self).__init__(*args, **kwargs) 

     self.fields['priority'].empty_label = None 

您也可以直接将它添加在字段声明(如果你在init中手动声明它),在queryset,widget,next等等旁边。