python - User.query.filter_by(id=user_id).first() 和 User.query.get(user_id) 在 Flask Sql Alchemy 中返回 None
问题描述
根据路由参数传递的user_id查询用户时遇到错误。我在许多其他函数中使用了相同的方法,它们都没有抛出任何错误。我的数据库中有具有相应 ID 的用户。这个查询不应该检测到任何错误,但它确实并且非常感谢任何帮助。
函数中的 target_user 变量被分配为 None ,这给了我错误
"NoneType' object has no attribute 'id'"
这是用户模型
followers = db.Table('followers',
db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
)
class User(UserMixin, db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
user_handle = db.Column(db.String(15), unique=True)
display_name = db.Column(db.String(30), nullable=False)
password = db.Column(db.String(20), nullable=False)
profile_picture_url = db.Column(db.String(100), nullable=True, default="./static/user_media/default_egg.png")
# profile_description = db.Column(db.String(140), nullable=True)
tweets = db.relationship('Tweet', backref="owner")
# relationships
liked = db.relationship('LikeTweet', foreign_keys="LikeTweet.liked_by",
backref="user", lazy="dynamic")
def like_tweet(self, tweet):
if not self.has_liked_tweet(tweet):
like = LikeTweet(liked_by=self.id, liked_tweet=tweet.id)
db.session.add(like)
def unlike_tweet(self, tweet):
if self.has_liked_tweet(tweet):
LikeTweet.query.filter_by(
liked_by=self.id,
liked_tweet=tweet.id).delete()
def has_liked_tweet(self, tweet):
return LikeTweet.query.filter(
LikeTweet.liked_by == self.id,
LikeTweet.liked_tweet == tweet.id).count() > 0
followed = db.relationship('User', secondary=followers,
primaryjoin=(followers.c.follower_id == id),
secondaryjoin=(followers.c.followed_id == id),
backref=db.backref('followers', lazy='dynamic'),
lazy='dynamic')
def follow(self, user):
if not self.is_following(user):
self.followed.append(user)
return self
def unfollow(self, user):
if self.is_following(user):
self.followed.remove(user)
return self
def is_following(self, user):
return self.followed.filter(followers.c.followed_id == user.id).count() > 0
这是我从中进行查询的功能
@main.route('/follow/<user_id>')
@login_required
def follow_user(user_id):
referrer = request.headers.get("Referer")
target_user = User.query.filter_by(id=user_id).first()
print(target_user)
if current_user.is_following(target_user):
current_user.unfollow(target_user)
db.session.commit()
else:
current_user.follow(target_user)
db.session.commit()
return redirect(referrer)
解决方案
推荐阅读
- php - 如何使用列作为 mysql 查询的一部分?
- python - Napalm:OSError:在 send_command_expect 中从未检测到搜索模式
- kubernetes - 2 个或更多 pod 的 K8s 内存请求处理
- package - Pkg.clone 过时了吗?
- azure-gov - 在 azure gov 区域中找不到订阅
- apache - 如何做实习网址屏蔽(只留下域名)
- azure - 通过应用服务计划查看托管在 Azure Web App 上的 ASP.NET Core MVC 生成的随机错误
- sqlite - Sqlbrite 数据库如何使用调度器
- firebase - MissingPluginException(在通道 plugins.flutter.io/firebase_core 上找不到方法 FirebaseApp#appNamed 的实现)
- node.js - 你能帮我限制我的命令吗(discord.js)