forms.py中的上下文处理器

时间:2013-12-12 10:53:20

标签: python django forms

context_processor.py:

def max_min(request):
    """
    some code. request required, because I need 
    calculate some information about each user
    """
    return {'max': max, 'min':max}

forms.py:

class MaxMin(forms.Form):
my_field = forms.IntegerField( 
   min_value=min, max_value=max, required=True, 
   widget=forms.NumberInput(attrs={'class':'form-control', 
   'required': 'true'}))

所以,我在 context_processor.py (它在网站的所有页面上使用)中都有代码,我希望在 forms.py 中使用。但我不知道,如何导入和使用它。 max_min 需要请求,但在 forms.py 我没有。

是的,我知道,我可以在表单html中使用{{min}}{{max}},而不需要 forms.py ,但是我需要检查代码,值是什么?通过POST。

感谢。

更新

class MAxMin(forms.Form):
    def __init__(self, req, *args, **kwargs):
        super(MAxMin, self).__init__(*args, **kwargs)
        self.request = req
    def mymethod(self): 
        return max_min(self.request)
    my_field = forms.IntegerField( 
         min_value=mymethod(), required=True, 
         widget=forms.NumberInput(attrs={'class':'form-control', 
         'required': 'true'}))

1 个答案:

答案 0 :(得分:0)

在实例化时注入请求怎么样?

#views.py
form = MyForm(request)

#forms.py
def __init__(self, req, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.request = req

#somewhere in your form's body
max_min(self.request)

<强>更新 那么,你的情况似乎与我的预期不同 考虑这种方法:

class MAxMin(forms.Form):
my_field = forms.IntegerField(required=True, 
                              widget=forms.NumberInput(attrs={'class':'form-control', 
                              'required': 'true'}))

def __init__(self, req, *args, **kwargs):
    super(MAxMin, self).__init__(*args, **kwargs)
    self.fields['my_field'].min_value = max_min(req)
相关问题