From a757480791bcf0c6ef7001b9a31f39445a3f8d26 Mon Sep 17 00:00:00 2001 From: kevin Date: Wed, 27 Sep 2023 21:14:17 +0300 Subject: [PATCH] Update the code in my models.py file --- lib/models.py | 60 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/lib/models.py b/lib/models.py index 2681bee5a..c86ba3537 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,29 +1,63 @@ -from sqlalchemy import ForeignKey, Column, Integer, String, MetaData -from sqlalchemy.orm import relationship, backref +from sqlalchemy import ForeignKey, Column, Integer, String +from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base -convention = { - "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", -} -metadata = MetaData(naming_convention=convention) - -Base = declarative_base(metadata=metadata) +Base = declarative_base() class Company(Base): __tablename__ = 'companies' - id = Column(Integer(), primary_key=True) - name = Column(String()) - founding_year = Column(Integer()) + id = Column(Integer, primary_key=True) + name = Column(String) + founding_year = Column(Integer) + + freebies = relationship('Freebie', back_populates='company') + + devs = relationship('Dev', secondary='freebies', back_populates='companies') def __repr__(self): return f'' + def give_freebie(self, dev, item_name, value): + new_freebie = Freebie(dev=dev, item_name=item_name, value=value) + self.freebies.append(new_freebie) + + @classmethod + def oldest_company(cls): + return cls.query.order_by(cls.founding_year).first() + class Dev(Base): __tablename__ = 'devs' - id = Column(Integer(), primary_key=True) - name= Column(String()) + id = Column(Integer, primary_key=True) + name = Column(String) + + freebies = relationship('Freebie', back_populates='dev') + + companies = relationship('Company', secondary='freebies', back_populates='devs') def __repr__(self): return f'' + + def received_one(self, item_name): + return any(freebie.item_name == item_name for freebie in self.freebies) + + def give_away(self, other_dev, freebie): + if freebie.dev == self: + freebie.dev = other_dev + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer, primary_key=True) + item_name = Column(String) + value = Column(Integer) + + dev_id = Column(Integer, ForeignKey('devs.id')) + company_id = Column(Integer, ForeignKey('companies.id')) + + dev = relationship('Dev', back_populates='freebies') + company = relationship('Company', back_populates='freebies') + + def print_details(self): + return f"{self.dev.name} owns a {self.item_name} from {self.company.name}"