Колба для отношений между одним и многими

У меня есть класс, который представляет материал:

class Stuff(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    price = db.Column(db.Integer, nullable=False)
    name = db.Column(db.String(100), unique=True, nullable=False)
    logo = db.Column(db.Text)
    description = db.Column(db.Text)

    def __repr__(self):
        return '<Stuff %r>' % self.name

И есть класс, который представляет User:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    name = db.Column(db.String(80), unique=False, nullable=False)
    cart = db.Column(db.Text)

    def __repr__(self):
        return '<User %r>' % self.name

Здесь корзина представляет собой json строку вида ["Stuff_id_1", "Stuff_id_2"]
. Для добавления нового товара я просто изменяю эту строку
. Я понимаю, что мой способ использования поля cart тупой
. Как сделать отношения один ко многим?

Чтобы сделать это отношение "один-ко-многим", необходимо отредактировать класс Stuff и добавить внешний ключ к таблице User.

class Stuff(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    price = db.Column(db.Integer, nullable=False)
    name = db.Column(db.String(100), unique=True, nullable=False)
    logo = db.Column(db.Text)
    description = db.Column(db.Text)
    user_id = db.Column(db.ForeignKey('name_of_users_table.id'))
    user = relationship('User', backref='user_stuffs')

    def __repr__(self):
        return '<Stuff %r>' % self.name

Теперь вы можете использовать отношения следующим образом:

user = User()
stuff = Stuff()

# Add to the relationship
user.user_stuffs.append(stuff)
db.session.commit()
Вернуться на верх