我正在使用flask-admin构建产品admin。产品可以具有单个或多个变体集。例如,一件T恤可以设置“大小”设置,其中包含S,M,L的记录。夹克可以同时设置“大小”和“颜色”(红色,绿色,黄色等)设置。
理想我希望管理员能够从产品视图中删除所有产品变体。产品视图上的所有其他字段只是该模型的常规flask-admin默认字段。草图示例:
我是flask-admin的新手,所以在开始hackjobbing之前,是否存在以前在flask-admin驱动的UI中建立这种关系的先前路径?我在考虑某个字段替代,以在页面内还是在模式窗口中加载自定义窗口小部件(或其他模型视图)?
下面是我对flask-sqlalchemy采取的方法的简化概述。
产品
-----------------------------
| skuid | name |
-----------------------------
| B1234 | Test Product 1 |
-----------------------------
| B1235 | Test Product 2 |
-----------------------------
class Product(db.Model):
__tablename__ = 'products'
skuid = db.Column(db.String(16),primary_key=True)
name = db.Column(db.String(128))
variants = db.relationship("Option",secondary="products_to_options")
products_to_options
------------------------
| skuid | variant_set |
------------------------
| B1234 | B1234_1 |
------------------------
| B1234 | B1234_2 |
------------------------
| B1235 | B1235_1 |
------------------------
class ProductToOption(db.Model):
__tablename__ = 'products_to_options'
skuid = db.Column(db.String(16),db.ForeignKey('products.skuid'),nullable=False)
variant_set = db.Column(db.String(16),db.ForeignKey('options.variant_set'),nullable=False)
products = db.relationship('Product',foreign_keys="ProductToOption.skuid")
variants = db.relationship('Option',foreign_keys="ProductToOption.variant_set")
选项
-----------------------------------------------------
| variant_set | code | variant_type | description |
-----------------------------------------------------
| B1234_1 | S | size | Small |
-----------------------------------------------------
| B1234_1 | M | size | Medium |
-----------------------------------------------------
| B1234_1 | L | size | Large |
-----------------------------------------------------
| B1234_2 | RD | color | Red |
-----------------------------------------------------
| B1234_2 | GR | color | Green |
-----------------------------------------------------
| B1234_2 | YL | color | Yellow |
-----------------------------------------------------
| B1235_1 | OK | wood | Oak |
-----------------------------------------------------
| B1235_1 | CH | wood | Cherry |
-----------------------------------------------------
class Option(db.Model):
__tablename__ = 'options'
variant_set = db.Column(db.String(16),nullable=False)
code = db.Column(db.String(8),nullable=False)
variant_type = db.Column(db.String(16),db.ForeignKey('option_types.id'),nullable=False)
description = db.Column(db.String(16),nullable=False)
product = db.relationship("Product",secondary="products_to_options")
type = db.relationship("OptionType",foreign_keys="Option.variant_type")
option_types
------------------------
| id | description |
------------------------
| size | Garment Size |
------------------------
| color | Garment Color|
------------------------
| wood | Wood Type |
------------------------
| ring | Ring Size |
------------------------
| shoe | Shoe Size |
------------------------
class OptionType(db.Model):
__tablename__ = 'option_types'
id = db.Column(db.String(16),primary_key=True)
description = db.Column(db.String(36),nullable=False)