Хранить список другой модели в модели в sqlalchemy - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть модель User, которая должна содержать список модели Message.
Этот список (в модели Usesr) должен содержать 20 объектов Message, которые будут обновляться каждые 24 часа.
Как я могу реализовать эту архитектуру в моих модельных классах?

Я думаю о 2 решениях,
Сначала нужно сохранить атрибут списка в модели пользователя:

class User (db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name =  db.Column(db.String(50), nullable = False)

    def __init__ (self,name):
        self.name = name
        self.tempList = []

    def appendTempList (self, item):
        self.tempList.append (item)

    def removeTempListItems (self):
        self.tempList = []

class Message:
    id = db.Column(db.Integer, primary_key=True)
    context =  db.Column(db.String(200), nullable = False)

    def __init__(self,msg):
        self.context = msg

#some codes to add 20 random items into tempList of each User, every 24 hours


Это хороший подход? Могу ли я сохранить список внутри класса модели в качестве атрибута?!

Мой второй подход заключается в использовании отношения «многие ко многим» между этими моделями:

user_message_table = db.Table ('user_message_table',
db.Column('user_id', db.Integer, db.ForeignKey('message_model.id')),
db.Column('message_id', db.Integer, db.ForeignKey('user_model.id'))
)

class User (db.Model):
    __tablename__ = 'user_model'

    id = db.Column(db.Integer, primary_key=True)
    name =  db.Column(db.String(50), nullable = False)
    tempList = db.relationship("Message", secondary = user_message_table)

    def __init__ (self,name):
        self.name = name

    def appendTempList (self, item):
        self.tempList.append (item)
        db.session.commit()

    def removeTempListItems (self):
        self.tempList.remove()
        #remove item from user_message_table too

class Message:
    __tablename__ = 'message_model'
    id = db.Column(db.Integer, primary_key=True)
    context =  db.Column(db.String(200), nullable = False)

    def __init__(self,msg):
        self.context = msg

Есть идеи?

...