Updated models
This commit is contained in:
parent
f7d7a97c82
commit
4f2dcd9d93
1 changed files with 23 additions and 8 deletions
31
models.py
31
models.py
|
@ -1,20 +1,35 @@
|
||||||
from app import db
|
from app import db
|
||||||
|
|
||||||
|
endorsed = db.Table('endorses',
|
||||||
|
db.Column('user_id', db.String, db.ForeignKey('user.username'), primary_key=True),
|
||||||
|
db.Column('achievement_id', db.Integer, db.ForeignKey('achievement.id'), primary_key=True)
|
||||||
|
)
|
||||||
|
|
||||||
class User(db.Model):
|
class User(db.Model):
|
||||||
__tablename__ = "Users"
|
username = db.Column(db.String(80), unique=True, nullable=False, primary_key=True)
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
|
||||||
username = db.Column(db.String(80), unique=True, nullable=False)
|
def to_obj(self):
|
||||||
achievements = db.relationship("Achievement", backref="person", lazy=True)
|
return {
|
||||||
endorses = db.relationship("Achievement", backref="endorsed_by", lazy=True)
|
"username": self.username,
|
||||||
|
"achievements": [x.to_obj() for x in Achievement.query.filter_by(achieved_by=self.username).all()]
|
||||||
|
}
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<User %r>' % self.username
|
return '<User %r>' % self.username
|
||||||
|
|
||||||
class Achievement(db.Model):
|
class Achievement(db.Model):
|
||||||
__tablename__ = "Achievement"
|
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
name = db.Column(db.String(128), nullable=False)
|
name = db.Column(db.String(128), nullable=False)
|
||||||
person_id = db.Column(db.Integer, db.ForeignKey("Users.id"))
|
achieved_by = db.Column(db.Integer, db.ForeignKey("user.username"), nullable=False)
|
||||||
|
|
||||||
|
endorsed_by = db.relationship('User', secondary=endorsed, lazy='subquery', backref=db.backref('user', lazy=True))
|
||||||
|
|
||||||
|
def to_obj(self):
|
||||||
|
return {
|
||||||
|
"id": self.id,
|
||||||
|
"name": self.name,
|
||||||
|
"endorsed_by": [x.username for x in self.endorsed_by], # Don't show full user object to avoid infinite loops
|
||||||
|
}
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<Achievement %r from %r>' % (self.name, self.person.username)
|
return '<Achievement %r from %r>' % (self.name, self.achieved_by.name)
|
||||||
|
|
Loading…
Reference in a new issue