Help needed serializing
hello guys im having a hard time serializing sqlalchemy object type AppenderBaseQuery
This is my model:
class Follow(db.Model):
__tablename__ = 'follow'
follower_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
followed_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
timestamp = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return f'follower: {self.follower_id}, followed: {self.followed_id}'
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100), unique=True)
email = db.Column(db.String(100))
password = db.Column(db.Binary)
profilepic = db.Column(db.String)
timecreated = db.Column(db.DateTime)
#picture = db.relationship('Picture', backref='owner', lazy='dynamic')
comment = db.relationship('Comment', backref='user', lazy='dynamic')
post = db.relationship('Post', backref='user', lazy='dynamic')
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 follow(self, user):
if not self.is_following(user):
f = Follow(follower=self, followed=user)
db.session.add(f)
db.session.commit()
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
def selfFollowing(self):
#Allow user in session to follow him/herself to allow posts of user in session
#to be able to render own posts if wanted
u = Follow.query.filter_by(followed_id=self.id).first()
if u is None:
#self.followers.append(Follow(follower=self))
f = Follow(follower_id=self.id, followed_id=self.id)
db.session.add(f)
db.session.commit()
@property
def followed_posts(self):
return Post.query.join(Follow, Follow.followed_id == Post.user_id)\
.filter(Follow.follower_id == self.id).order_by(Post.timestamp.desc())
@property
def followed_posts_to_json(self):
l = []
for p in self.followed_posts:
obj = p.timestamp
date = self.datetime_serialized(obj)
comm = p.comment.comment
c = p.commentList(comm)
json = {
'post_id': p.id,
'posts': p.post,
'time': date,
'userpic': p.postowner.profilepic,
'username': p.username,
'picposted': p.picture,
'comment': c
}
l.append(json)
return l
def post_to_json(self):
l = []
for p in self.post.all():
obj = p.timestamp
j = {
'id': p.id,
'post': p.post,
}
l.append(j)
return l
@staticmethod
def datetime_serialized(obj):
i
hello guys im having a hard time serializing sqlalchemy object type AppenderBaseQuery
This is my model:
class Follow(db.Model):
__tablename__ = 'follow'
follower_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
followed_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
timestamp = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return f'follower: {self.follower_id}, followed: {self.followed_id}'
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100), unique=True)
email = db.Column(db.String(100))
password = db.Column(db.Binary)
profilepic = db.Column(db.String)
timecreated = db.Column(db.DateTime)
#picture = db.relationship('Picture', backref='owner', lazy='dynamic')
comment = db.relationship('Comment', backref='user', lazy='dynamic')
post = db.relationship('Post', backref='user', lazy='dynamic')
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 follow(self, user):
if not self.is_following(user):
f = Follow(follower=self, followed=user)
db.session.add(f)
db.session.commit()
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
def selfFollowing(self):
#Allow user in session to follow him/herself to allow posts of user in session
#to be able to render own posts if wanted
u = Follow.query.filter_by(followed_id=self.id).first()
if u is None:
#self.followers.append(Follow(follower=self))
f = Follow(follower_id=self.id, followed_id=self.id)
db.session.add(f)
db.session.commit()
@property
def followed_posts(self):
return Post.query.join(Follow, Follow.followed_id == Post.user_id)\
.filter(Follow.follower_id == self.id).order_by(Post.timestamp.desc())
@property
def followed_posts_to_json(self):
l = []
for p in self.followed_posts:
obj = p.timestamp
date = self.datetime_serialized(obj)
comm = p.comment.comment
c = p.commentList(comm)
json = {
'post_id': p.id,
'posts': p.post,
'time': date,
'userpic': p.postowner.profilepic,
'username': p.username,
'picposted': p.picture,
'comment': c
}
l.append(json)
return l
def post_to_json(self):
l = []
for p in self.post.all():
obj = p.timestamp
j = {
'id': p.id,
'post': p.post,
}
l.append(j)
return l
@staticmethod
def datetime_serialized(obj):
i