【问题标题】:How to pass variable to subclass of FlaskForm如何将变量传递给 FlaskForm 的子类
【发布时间】:2020-10-13 15:09:10
【问题描述】:

我有一个派生自 FlaskForm 的类,我需要传递我的参数

class User(FlaskForm):    
    def __init__(self, argName, argLastName): 
        super(EditCandidate, self).__init__()
        self.name = argLastName
        self.lastName = argLastName


    name = StringField(default = self.name , validators=[DataRequired(message="Ad xanası doldurulmalıdır."), Length(min=2, max=20, message="Ad min-2, max-20 hərfdən təşkil oluna bilər.")] )
    lastName = StringField(default= self.lastName , validators=[DataRequired(message="Soyad xanası doldurulmalıdır."), Length(min=2, max=20, message="Soyad min-2, max-20 hərfdən təşkil oluna bilər.")] )

但是 Python 给了我这个错误:

    name = StringField(default = self.name , validators=[DataRequired(message="Ad xanası doldurulmalıdır."), Length(min=2, max=20, message="Ad min-2, max-20 hərfdən təşkil oluna bilər.")] )
NameError: name 'self' is not defined

如何解决这个问题?

【问题讨论】:

    标签: python flask flask-wtforms wtforms


    【解决方案1】:

    Self代表类的实例/对象,用于访问其属性和方法。

    您的属性定义为self.nameself.lastName,因此您只能使用上述属性,而不能使用self.argName,self.argLastName- 这些属性作为参数传递给函数,不能在函数外部访问范围。

    StringField() 调用中替换它们,它应该可以工作。

    编辑:

    在这种情况下,这是因为selfinit() 方法之外,这意味着如果在初始化函数之外的任何地方使用该词本身,则它没有定义。解决方法:缩进名称和姓氏变量,使它们与self.<>属性出现在同一个缩进上,如下所示

    class User(FlaskForm):    
        def __init__(self, argName, argLastName): 
            super(EditCandidate, self).__init__()
            self.name = argLastName
            self.lastName = argLastName
    
        
            name = StringField(default = self.name , validators=[DataRequired(message="Ad xanası doldurulmalıdır."), Length(min=2, max=20, message="Ad min-2, max-20 hərfdən təşkil oluna bilər.")] )
            lastName = StringField(default= self.lastName , validators=[DataRequired(message="Soyad xanası doldurulmalıdır."), Length(min=2, max=20, message="Soyad min-2, max-20 hərfdən təşkil oluna bilər.")] )
    

    【讨论】:

    • 还是不行。错误:name = StringField(default = self.name, validators=[DataRequired(message="Ad xanası doldurulmalıdır."), Length(min=2, max=20, message="Ad min-2, max-20 hərfdən təşkil oluna bilər.")] ) NameError: name 'self' is not defined
    • 查看编辑。它可以按照说明解决,可能是您正在寻找的。您也可以将它们放在一个方法中,并将self 作为参数传递并初始化它。
    • self 问题将得到解决,但变量必须在 类级别
    • 在课堂级别需要什么 - 您能否详细解释一下,即您的用例需要它。通常,对象/实例用于访问FlaskForm。如果足够,您可以定义一个全局级别变量并使用它。
    • @AzyCrw4282 TypeError: 'UnboundField' 对象不可调用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多