Django 表单继承问题

1 投票
3 回答
1033 浏览
提问于 2025-04-15 19:58

我为什么不能这样做呢?

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无法获取我在构造时设置的变量tester呢?

我觉得我对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)

换句话说,我需要获取一个会话变量,然后把它设置为一个初始值...

有没有办法通过__init__或者其他方式来处理这个呢?

3 个回答

0

你可以这样做:

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)
1

你可以这样做 这儿有个方法

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'
2

你遇到的问题是因为你的 CharField 是在类创建的时候就生成的,并且被 UserProfileConfig.username 指向,而不是在实例创建的时候才生成。也就是说,self.tester 这个东西在你创建实例的时候,调用 __init__ 之前是不存在的。

撰写回答