【问题标题】:Pass an argument to a class which becomes a keyword for a function将参数传递给成为函数关键字的类
【发布时间】:2016-12-13 12:59:14
【问题描述】:

在 Flask 和 SQLAlchemy 中使用 WTForms。从用户名和电子邮件字段中获取数据并确保它不在数据库中。这是我现在必须做的。

class IsUnique(object):
    def __init__(self, db_field=None):
        self.db_field = db_field

    def __call__(self, form, field):
        data = field.data
        if self.db_field=='name':
            if User.query.filter_by(name=data).first() != None:
                raise ValidationError('Sorry, that username is taken.')
        if self.db_field=='email':
            if User.query.filter_by(email=data).first() != None:
                raise ValidationError(
                    'Sorry, that email address has already been registered.'
                    )

我想做的是将 db_field 参数作为字符串传递给类实例,并将其传递给User.query.filter_by(db_field=data。不幸的是,我所知道的只是使用 if 语句,它有效,但有点麻烦。一定有办法做到这一点,但我不知道怎么做。

【问题讨论】:

    标签: python sqlalchemy flask-sqlalchemy wtforms flask-wtforms


    【解决方案1】:

    你可以通过keyword arguments as a dict,像这样:

    def __call__(self, form, field):
        key = self.db_field # 'name' or 'email'
        params = { key: field.data }
        if User.query.filter_by(**params).first() != None:
            raise ValidationError('Sorry, that {} is taken.'.format(key))
    

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 2021-09-11
      • 2019-02-04
      • 1970-01-01
      相关资源
      最近更新 更多