flask-admin + sqlalchemy-修改父模型视图中相关记录的“集合”

我正在使用flask-admin构建产品admin。产品可以具有单个或多个变体集。例如,一件T恤可以设置“大小”设置,其中包含S,M,L的记录。夹克可以同时设置“大小”和“颜色”(红色,绿色,黄色等)设置。

理想我希望管理员能够从产品视图中删除所有产品变体。产品视图上的所有其他字段只是该模型的常规flask-admin默认字段。草图示例:

flask-admin + sqlalchemy-修改父模型视图中相关记录的“集合”

我是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)
gswgyh727 回答:flask-admin + sqlalchemy-修改父模型视图中相关记录的“集合”

看来您实际上是在这里的父子子构造行中尝试某项操作,其中第一个孩子是集合。例如,产品具有子服装大小,其子表包含小,中和大尺寸。因此,如果您将数据库模型更改为此想法,那么该部分可能会起作用。

缺点是,据我所知,flask-admin尚不能(尚未)提供支持3个表(父表,子表及其子表)的创建选项卡。那一定是您需要建立自己的东西。

本文链接:https://www.f2er.com/3135583.html

大家都在问