Я использую зефир, флягу и sqlachemy для создания проекта:
Мои схемы и модели:
class Category(db.Model):
__tablename__ = 'Category'
id = db.Column(postgresql.UUID(as_uuid=True), primary_key=True)
name = db.Column(db.String(80), nullable=False)
products = relationship("Product", back_populates='category')
class Product(db.Model):
__tablename__='Product'
id = db.Column(postgresql.UUID, primary_key=True)
name = db.Column(db.String(80), nullable=False)
desc = db.Column(db.TEXT, nullable=True)
provider = db.Column(db.String(200), nullable=False)
barcode = db.Column(db.String(20), nullable=False)
price = db.Column(db.DECIMAL(10, 2), nullable=False)
category_id=db.Column(postgresql.UUID, db.ForeignKey('Category.id'))
category = relationship("Category", back_populates='products')
class CategorySchema(ModelSchema):
class Meta:
model = Category
sqla_session=db.session
class ProductSchema(ModelSchema):
class Meta:
model = Product
sqla_session=db.session
Вы можете видеть, что у продукта иностранный ключ category_id
Я получаюrequest (product) json like:
{
"id": "fceeec0d-de3c-4d65-84ff-f2374cf87e02",
"name": "Iron Screwdriver",
"provider": "ABC provider",
"barcode": "e9099384-7e67-45e3-88d5-8b310b40d0aa",
"price": 10.5,
"category_id": "a0b98a09-e7a4-4898-af70-7f3bd403678d"
}
Я хотел бы сохранить продукт в базе данных, предположив, что категория уже имеет соответствующий category_id.
Я хотел бы сохранить этот продукт как:
def create(product):
id=product['id']
existing_item = Product.query.filter(Product.id == id).one_or_none()
if id is None:
id = uuid.uuid4()
product['id']=id
if existing_item is None:
schema = ProductSchema()
new_item = schema.load(product, session=db.session).data
print(new_item)
print(dir(new_item))
db.session.add(new_item)
db.session.commit()
data = schema.dump(new_item).data
return data, 201
Но я считаю, что new_item выглядит так:
{'provider': 'ABC provider', 'name': 'Iron Screwdriver', 'price': Decimal('10.50'), 'id': UUID('fceeec0d-de3c-4d65-84ff-f2374cf87e02')}
В new__item он не имеет иностранного ключа category_id.Как получить (создать) ProductSchema с подключением категории и сохранить ее.Покажите мне пример, как это сделать.