适当减少手机使用,有助于视力保护... 新的一年祝您:身体健康,阖家欢乐!~~

flask-admin inline-models 的使用小记

浏览量:666 作者:admin 类别:: 学习笔记 更新时间:2023-03-27 21:41:28

看了几天的文档,搜索无果,再看源码,发现了,inline-models的使用说明。

英文没有水平,看起来,太吃力。在这里记录一下。

之前的学习中,只知道要使用inline-models,但不知道怎么使用,使用了根没用一样,甚至还报错。

在编辑表单中,显示的外键关系的数据,为一个下拉菜单,显然这样不是我想要的。无论你改变,uselist=False,只是从多选变成了单选。

下面看一下,源码的说明:

inline_models = None
"""
    Inline related-model editing for models with parent-child relations.

    Accepts enumerable with one of the following possible values:

    1. Child model class::

        class MyModelView(ModelView):
            inline_models = (Post,)

    2. Child model class and additional options::

        class MyModelView(ModelView):
            inline_models = [(Post, dict(form_columns=['title']))]

    3. Django-like ``InlineFormAdmin`` class instance::

        from flask_admin.model.form import InlineFormAdmin

        class MyInlineModelForm(InlineFormAdmin):
            form_columns = ('title', 'date')

        class MyModelView(ModelView):
            inline_models = (MyInlineModelForm(MyInlineModel),)

    You can customize the generated field name by:

    1. Using the `form_name` property as a key to the options dictionary::

        class MyModelView(ModelView):
            inline_models = ((Post, dict(form_label='Hello')))

    2. Using forward relation name and `column_labels` property::

        class Model1(Base):
            pass

        class Model2(Base):
            # ...
            model1 = relation(Model1, backref='models')

        class MyModel1View(Base):
            inline_models = (Model2,)
            column_labels = {'models': 'Hello'}

    By default used ManyToMany relationship for inline models.
    You may configure inline model for OneToOne relationship.
    To achieve this, you need to install special ``inline_converter``
    for your model::

        from flask_admin.contrib.sqla.form import \
            InlineOneToOneModelConverter

        class MyInlineModelForm(InlineFormAdmin):
            form_columns = ('title', 'date')
            inline_converter = InlineOneToOneModelConverter

        class MyModelView(ModelView):
            inline_models = (MyInlineModelForm(MyInlineModel),)
"""

在说明中,看到inline-models默认使用在多对多的关系中。如果想使用inline-models到一对一关系中,需要

from flask_admin.contrib.sqla.form import  InlineOneToOneModelConverter

from flask_admin.model import InlineFormAdmin

class MyInlineModelForm(InlineFormAdmin):    # 需要导入,而不是你自己定义的

     form_columns = ('title', 'date')

     inline_converter = InlineOneToOneModelConverter

class MyModelView(ModelView):

    inline_models = (MyInlineModelForm(MyInlineModel),)   # 这个是你要设置行内编辑的 类名(自己的模型类)

 

至此,一对一关系中的编辑表单中,已经可以显示,对应的列了。不再是下拉菜单,而是正常的input 文本了

关于博主
北京南城网络及弱电【张工】为您提供:
校园网、楼宇、村镇、园区,光纤网络覆盖,无线覆盖 华为|H3c|锐捷|爱快|panabit等品牌,路由、交换机、AC、AP 无源光网络(PON)设备,布署、调试、维运,等服务...
应急/临时光纤熔接...[藤仓22S]
博文为学习python所写:内容摘自网络、学习笔记、记事备忘。
QQ:872876353,欢迎交流学习、加Q注明来意。

诗文鉴赏

《满江红》· 岳飞
落星侵晓没,
残月半山低。
怒发冲冠,
凭栏处、潇潇雨歇。
抬望眼、仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。
莫等闲、白了少年头,
空悲切。
源于生活-记录日常
The site based on python 3 with flask...