我正在尝试做一个小项目,但是SQLAlchemy中的数据库结构存在一些困难。我有两个数据库模型(下面的代码)。
问题: 我怎么做?我需要专门为登录用户创建一条记录。这样,当我显示它们(他的客户)时,它们只会显示给该特定用户。
类用户(UserMixin,db.Model): 表名 ='用户'
id = db.Column(db.Integer, primary_key=True)
company_name = db.Column(db.String(120), index=True, unique=False)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
clients = db.relationship('Client', backref='invoice_clients', lazy='dynamic')
类Client(db.Model): 表名 ='客户端'
id = db.Column(db.Integer, primary_key=True)
client_name = db.Column(db.String(140))
client_company = db.Column(db.String(140))
client_email = db.Column(db.String(140))
invoice_amount = db.Column(db.Integer)
service_description = db.Column(db.String)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
我希望当用户从其个人资料页面添加客户端时-该客户端仅会为他记录在数据库中。
答案 0 :(得分:0)
首先,我相信您的参数backref
向后。这是您可以在引用的对象上使用的属性,以“返回”当前类。所以它应该看起来像这样:
class User(UserMixin, db.Model):
__tablename__ = 'user'
clients = db.relationship('Client', backref='user', lazy='dynamic')
关于为特定用户添加客户的问题,有两种解决方法。您可以手动执行以下操作:
# Or flask_login, or whatever you're using for user management
from flask_security import current_user
new_client = Client(client_name="Lancelot", user_id=current_user.id)
db.session.add(new_client)
db.session.commit()
或者您可以简单地使用SQLAlchemy将客户端附加到您的用户。声明的外键将导致ID自动分配:
from flask_security import current_user
new_client = Client(client_name="Sir Bedivere")
current_user.clients.append(new_client)
db.session.commit()