我试图使用excellente图书馆混音器生成一些灯具来测试Flask应用程序。我已经在Django项目中使用它并且工作得很好,但是无论我做什么,我都会收到null值。
from mixer.backend.flask import mixer
from models import Users
from myproj import app
mixer.init_app(app)
me.blend(Users)
返回null。
我也试过直接实例化应用程序。
from mixer.backend.flask import Mixer
from models import Users
from myproj import app
mixer = Mixer(app=app)
me = mixer.blend(Users)
返回相同的空值。
两种情况都会返回自动生成的ID。并保存到数据库中,但所有字段都有空。
知道为什么?
由于
答案 0 :(得分:5)
原来这是一个简单的答案 - 混音器不会为可以为空的字段生成数据。因此,要么在模型中指定,例如,这可以:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from mixer.backend.flask import mixer
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
db = SQLAlchemy(app)
mixer.init_app(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
if __name__ == '__main__':
with app.app_context():
db.create_all()
user = mixer.blend(User)
print user.id, user.username
# Prints: 1 collins1995
如果你想让它们可以为空,请告诉Mixer你想要它生成哪些字段:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from mixer import fakers as f
from mixer.backend.flask import mixer
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
db = SQLAlchemy(app)
mixer.init_app(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __repr__(self):
return '<User %r>' % self.username
if __name__ == '__main__':
with app.app_context():
db.create_all()
user = mixer.blend(User, username=f.get_username(), email=f.get_email())
print user.id, user.username, user.email
# Prints: 1 lover_boots robinson1963@google.vn
感谢klen,混音器的作者providing the solution。