Как получить вложенный связанный объект таблицы с объектом сериализации зефира? - PullRequest
0 голосов
/ 29 сентября 2018

Я использую зефир, флягу и 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 с подключением категории и сохранить ее.Покажите мне пример, как это сделать.

...