2012-04-06 48 views
0

我有一个表单,其中包含一个称为级别的选择字段,允许选择0-3之间的值,我想要动态限制选项。这可能吗?该视图是否有可能限制在Django的表单实例中的选择字段

伪代码将包含这样的事情:

form = new instance of myform 
allowed_level = 2 
form.level maximum value =< allowed_level 
+1

“命令”和“伪”的意思两个不同的东西:) – agf 2012-04-06 13:29:57

+0

@moguzalp“su”命令是“超级用户”的缩写,所以“sudo”的意思是“超级用户做”。 – agf 2012-04-06 13:41:46

+0

@moguzalp我不确定这是相关的:)这是对Unix命令名称的误解。 – agf 2012-04-06 13:44:47

回答

3

当然,你可以创建表单时动态设置验证标准:(注意:这不是一个完整的例子,因为我”不能确定你的设置中)

class MyForm(forms.Form): 

    level = ... 

    def __init__(self, *args, **kwargs, allowed_level=None): 
     self.allowed_level = allowed_level 
     super(MyForm, self).__init__(*args, **kwargs) 

    def clean_level(self): 
     data = self.cleaned_data['level'] 
     # Here you can play with what you want to allow 
     if level > self.allowed_level: 
      raise forms.ValidationError("A problem with level value") 
     return data 

,只需使用您的视图通常

def my_view(request, ...): 
    form = MyForm(allowed_level=2) 
    if form.is_valid(): 
     ...