37,720
社区成员
发帖
与我相关
我的任务
分享
#自引用多对多关系表
#这是models.py 中的Follow类
class Follow(db.Model):
__tablename__ = 'followss'
follower_id = db.Column(db.Integer, db.ForeignKey('users.id'),
primary_key=True)
followed_id = db.Column(db.Integer, db.ForeignKey('users.id'),
primary_key=True)
timestamp = db.Column(db.DateTime, default=datetime.datetime.utcnow)
#这是用户User类,筛选了主要可能有错的地方
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
password_hash = db.Column(db.String(128))
confirmed = db.Column(db.Boolean, default=False)
name = db.Column(db.String(64))
followed = db.relationship('Follow',
foreign_keys=[Follow.follower_id],
backref=db.backref('follower', lazy='joined'),
lazy='dynamic', cascade='all, delete-orphan')
followers = db.relationship('Follow',
foreign_keys=[Follow.followed_id],
backref=db.backref('followed', lazy='joined'),
lazy='dynamic',
cascade='all, delete-orphan')
def __init__(self, **kwargs):
super(User, self).__init__(**kwargs)
def follow(self, user):
if not self.is_following(user):
f = Follow(follower=self, followed=user)
db.session.add(f)
def unfollow(self, user):
f = self.followed.filter_by(followed_id=user.id).first()
if f:
db.session.delete(f)
def is_following(self, user):
return self.followed.filter_by(
followed_id=user.id).first() is not None
def is_followed_by(self, user):
return self.followers.filter_by(
follower_id=user.id).first() is not None
#报错如下:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 512, in __get__
mapper = orm.class_mapper(type)
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/base.py", line 421, in class_mapper
mapper = _inspect_mapped_class(class_, configure=configure)
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/base.py", line 400, in _inspect_mapped_class
mapper._configure_all()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1272, in _configure_all
configure_mappers()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 3029, in configure_mappers
mapper._post_configure_properties()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1828, in _post_configure_properties
prop.init()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/interfaces.py", line 184, in init
self.do_init()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1655, in do_init
self._process_dependent_arguments()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1712, in _process_dependent_arguments
self.target = self.mapper.mapped_table
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 767, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1628, in mapper
argument = self.argument()
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.py", line 281, in __call__
x = eval(self.arg, globals(), self._dict)
File "<string>", line 1, in <module>
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/util/_collections.py", line 729, in __missing__
self[key] = val = self.creator(key)
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.py", line 262, in _access_cls
return _determine_container(key, cls._decl_class_registry[key])
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.py", line 246, in _determine_container
value = value.attempt_get([], key)
File "/home/yambo1992/projects/blog_1/flaskypr/env0/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/clsregistry.py", line 91, in attempt_get
(".".join(path + [key]))
InvalidRequestError: Multiple classes found for path "Follow" in the registry of this declarative base.
Please use a fully module-qualified path.