使用Python“;混合器;具有带构造函数参数的SQL Alchemy模型的库

使用Python“;混合器;具有带构造函数参数的SQL Alchemy模型的库,python,unit-testing,flask,sqlalchemy,flask-sqlalchemy,Python,Unit Testing,Flask,Sqlalchemy,Flask Sqlalchemy,我使用Mixer作为SQLAlchemy模型的夹具生成器,flask作为Mixer后端。我有一个带构造函数的用户模型: class User(db.Model): user_id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(32), nullable=False, unique=True) password = db.Column(db.String(64), nulla

我使用Mixer作为SQLAlchemy模型的夹具生成器,flask作为Mixer后端。我有一个带构造函数的用户模型:

class User(db.Model):
    user_id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(32), nullable=False, unique=True)
    password = db.Column(db.String(64), nullable=False)
    salt = db.Column(db.String(64), nullable=False)
    def __init__(self, username, password):
        # Stuff to init
        pass
根据Mixer的文档,我使用重写的方法创建了一个Mixer子类,用构造函数参数填充模型,如下所示:

class MixerForModelsWithConstructor(Mixer):
    """
    Mixer for models which requires constructor values
    """
    def populate_target(self, values):
        target = self.__scheme(**values)
        return target
以下是创建混合器固定装置的方法:

mixer = mixer = MixerForModelsWithConstructor(app=app)
user = mixer.blend(Users, username='test', password='test')
其中,
app
是烧瓶应用程序对象。 但是,当我运行测试时,所有涉及的任务都失败了,因为模型构造函数仍然需要参数,而混合器没有传递它们


如果您有任何想法,我们将不胜感激。提前感谢。

文档似乎已经过时

以下是要使用的正确代码:

class CustomTypeMixer(TypeMixer):
    def __init__(self, cls, mixer=None, factory=None, fake=True):
        super().__init__(cls, mixer=mixer, factory=factory, fake=fake)
        self.__scheme = cls  # not sure why above line isn't setting this... is this the keyword 'cls' or just a variable named 'cls'?

    def populate_target(self, values):
        """ Populate a target by values. """
        target = self.__scheme(**dict(values))
        return target


class CustomMixer(Mixer):
    type_mixer_cls = CustomTypeMixer


mixer = CustomMixer(session=session, commit=True)
抄袭了这个答案