Колба для отношений между одним и многими
У меня есть класс, который представляет материал:
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()