Я новичок в flask. Я создаю свое первое веб-приложение, в котором пользователь может продавать товары, а другие пользователи могут его покупать, и будет таблица, в которой я смогу записывать эти транзакции.
У меня проблемы с проектированием базы данных с помощью flask SQLAlchemy. Я нашел пример формы, из которой я адаптировался. Пока что я получил следующее:
«Пользователь» владеет многими предметами, но «предмет» принадлежит только одному пользователю. (пользователи могут продавать много товаров) «У товара» может быть много транзакций, но транзакция рассчитана на одну продажу. (пользователи продают один и тот же товар много раз) «Пользователь» может быть продавцом или покупателем.
Не совсем уверен, правильно ли я понял, я также надеялся, что кто-нибудь сможет пролить свет на то, как я буду запрашивать я думаю, мне придется использовать запросы на соединение.
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
full_name = db.Column(db.String(50), nullable=False)
username = db.Column(db.String(50), unique=True, nullable=False)
image_file = db.Column(db.String(80), nullable=False,
default="default.jpg")
email = db.Column(db.String(115), unique=True, nullable=False)
location = db.Column(db.String(50), unique=False, nullable=False)
password_hash = db.Column(db.String(60), nullable=False)
last_seen = db.Column(db.DateTime, default=datetime.now)
# relationships
items = db.relationship("Item", backref="owner", lazy=True)
def __repr__(self):
return f"User('{self.username}')"
class Item(db.Model):
__tablename__ = "listings"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), unique=False, nullable=False)
description = db.Column(db.Text, unique=False, nullable=False)
quantity = db.Column(db.Integer, unique=False, nullable=False, default=1)
item_location = db.Column(db.String(50), unique=False, nullable=False)
condition = db.Column(db.String(50), unique=False, nullable=False)
price = db.Column(db.Float, unique=False, nullable=False)
date_posted = db.Column(db.DateTime, default=datetime.now)
item_views = db.Column(db.Integer, default=0)
image_file = db.Column(db.String(20), nullable=False,
default='default.jpg')
category = db.Column(db.String(50), unique=False, nullable=False)
sold = db.Column(db.Boolean, default=False)
# relationships
owner_id = db.Column(db.Integer, db.ForeignKey("users.id"))
transac_id = db.relationship('Transaction', backref='book', lazy='dynamic')
def __repr__(self):
return f"Listing('{self.title}', '{self.quantity}','{self.condition}', '{self.category}', '{self.description}', '{self.created_at}', '{self.available}')"
class Transaction(db.Model):
"""
Transactions are created when a listed item is sold"""
__tablename__ = "transaction"
id = db.Column(db.Integer, primary_key=True)
seller_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
buyer_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
listing_id = db.Column(db.Integer, db.ForeignKey(
'listing.id'), nullable=False)
amt_sold_for = db.Column(db.Float, nullable=False)
bought = db.Column(db.Boolean, nullable=False)
time_sold = db.Column(db.DateTime, default= datetime.now )
seller = db.relationship('User',
primaryjoin=(seller_id == User.id),
backref=db.backref('seller', order_by=id))
buyer = db.relationship('User',
primaryjoin=(buyer_id == User.id),
backref=db.backref('buyer', order_by=id)) ```