好吧,所以我确定标题很混乱,所以我会尽力在这里解释一下。我正在创建一个简单的网站,允许人们搜索电影和电视节目。如果他们是用户,他们还可以将Movie / Tv节目添加到他们的监视列表中。截至目前,我有这些表格:
class User(db.Model, UserMixin):
id = db.Column(db.Integer, autoincrement=True, primary_key=True)
watchList_id = db.Column(db.Integer, db.ForeignKey('watchList.watchList_id'), nullable=False, autoincrement=True)
first_name = db.Column(db.String(120))
last_name = db.Column(db.String(120))
email = db.Column(db.String(180), unique=True)
password = db.Column(db.String(255))
is_admin = db.Column(db.Boolean(), default=False)
active = db.Column(db.Boolean())
confirmed_at = db.Column(db.DateTime())
roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic'))
class watchList(db.Model):
__tablename__ = "watchList"
watchList_id = db.Column(db.Integer, autoincrement=True, primary_key=True)
title = db.Column(db.String(200), unique=True)
releaseDate = db.Column(db.Date)
producer = db.Column(db.String(100))
description = db.Column(db.String(300))
genre = db.Column(db.String(50))
image = db.Column(db.String(300))
我基本上希望功能能够在用户创建时为该用户创建一个监视列表,但是现在我不断得到一个错误,即当用户创建时,watchList_id没有值,因为我必须这样做想法如何做到这一点。我想以某种方式设置user_id == watchList_id,但我不知道该怎么做。有任何想法吗?如果需要,我可以发送更多代码。我正在使用flask-security,所以我不知道如何查看Register的python / flask代码。
答案 0 :(得分:0)
我认为你应该为此目的使用自定义方法。它对你有用,但我没有运行代码,所以你可以根据你修改。
class watchList(db.Model):
__tablename__ = "watchList"
watchList_id = db.Column(db.Integer, autoincrement=True,
primary_key=True)
title = db.Column(db.String(200), unique=True)
releaseDate = db.Column(db.Date)
producer = db.Column(db.String(100))
description = db.Column(db.String(300))
genre = db.Column(db.String(50))
image = db.Column(db.String(300))
@classmethod
def create_func(cls, **kw):
obj = cls(**kw)
#----creating User object with obj(watchList)
当你完成时,请告诉我。谢谢。
答案 1 :(得分:0)
如果您正确使用会话,这就像将其添加到用户的构造函数一样简单。您有用户构造函数创建一个新的watchlist对象并将其附加到映射关系。当提交创建用户的调用时,两者都将被创建,并且两者都将在那时获得它们的ID。看看你的代码,在我看来你的关系可能倒退了。如果监视列表由用户拥有,则通常在监视列表上有一个user_id列,该列是User的外键,然后在Users上为“监视列表”建立映射关系。如果您想确保每个用户只有一个,您可以使用相同的模式,但将uselist = False arg传递给关系。
然后您的用户类可以执行:
class User(db.Model, UserMixin):
def __init__(self, **kwargs):
# set up cols for user
for k,v in kwargs.items():
setattr(self, k, v)
# create watchlist: watchlist and user will both get their ids
# created at the same time when the session creating User
# is committed, and watchlist will have the user_id key too
self.watchlist = Watchlist()
如果您还没有这样做,我建议您通过优秀的SQLAlchemy ORM教程。一个好的经验法则是,如果您必须使用您的id cols手动执行任何,那么您使用的会话是错误的。 HTH!