代码之家  ›  专栏  ›  技术社区  ›  Brant

django形式继承问题

  •  1
  • Brant  · 技术社区  · 15 年前

    为什么我不能这么做?

    from django import forms
    from django.forms import widgets
    class UserProfileConfig(forms.Form):
    
        def __init__(self,*args,**kwargs):
            super (UserProfileConfig,self).__init__(*args,**kwargs)
            self.tester = 'asdf'
    
        username = forms.CharField(label='Username',max_length=100,initial=self.tester)
    

    更具体地说,为什么forms.charfield不能抓取我在构建期间设置的变量测试仪?

    我觉得我错过了关于Python处理这类事情的方法…

    编辑 :

    我真正想做的是:

    class UserProfileConfig(forms.Form):
    
        def __init__(self,request,*args,**kwargs):
            super (UserProfileConfig,self).__init__(*args,**kwargs)
            self.tester = request.session['some_var']
    
        username = forms.CharField(label='Username',max_length=100,initial=self.tester)
    

    换句话说,我需要获取一个会话变量,然后将其设置为初始值…

    有没有办法通过uuu init_uuu或其他方式来处理这个问题?

    3 回复  |  直到 15 年前
        1
  •  2
  •   jcdyer Anand S Kumar    15 年前

    你拥有的东西不起作用,因为 CharField 创建并由指向 UserProfileConfig.username 创建类时,而不是创建实例时。 self.tester 在你打电话之前不存在 __init__ 在实例创建时。

        2
  •  1
  •   Community Mohan Dere    8 年前

    你可以就这么做 this way

    from django import forms
    from django.forms import widgets
    class UserProfileConfig(forms.Form):
        username = forms.CharField(label='Username',max_length=100,initial=self.tester)
        tester = 'asdf'
    
        3
  •  0
  •   davetdog    15 年前

    你可以这样做:

    class UserProfileConfig(forms.Form):
    
        username = forms.CharField(label='Username',max_length=100)
    
    
    def view(request):
        user_form = UserProfileConfig(initial={'username': request.session['username',})
    

    这是普遍接受的方法,但您也可以这样做:

    class UserProfileConfig(forms.Form):
    
        def __init__(self,request,*args,**kwargs):
            super (UserProfileConfig,self).__init__(*args,**kwargs)
            self.fields['username'] = request.session['some_var']
    
    
        username = forms.CharField(label='Username',max_length=100)
    
    
    def view(request):
        user_form = UserProfileConfig(request=request)