微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLAlchemy 和 Flask-admin:无法在我的 Flask-admin 视图中使用文本 primary_key 将项目添加到 SQLAchemy 数据库

如何解决SQLAlchemy 和 Flask-admin:无法在我的 Flask-admin 视图中使用文本 primary_key 将项目添加到 SQLAchemy 数据库

我在 Flask 中开发了一个 API + 前端链接一个 sql 数据库 (sqlAlchelmy)。在这个应用中,我使用了几个模块,比如 Flask-admin 等。

我有我的文件 models.py,我在其中构建了一些模型,例如:

# All imports 
...

# Classes 
class Bb(db.Model):
 
    __tablename__ = 'BB'

    id = db.Column(Integer,primary_key=True)

class Aa(db.Model):
 
    __tablename__ = 'AA'

    # information
    id_bb = db.Column(ForeignKey('BB.id',primary_key=True,nullable=False)
    file = db.Column(Text,nullable=False)
    type_file = db.Column(Text,nullable=False)

    # References
    BB = db.relationship('Bb',backref=backref('aa'),uselist=False)

    # Args
    __table_args__ = (
        UniqueConstraint('id_a','type_file',name='UC_a_typef'),CheckConstraint("type_fichier IN ('type_a','type_b')",name='CC_typef')
    )

    # Functions
    def __str__(self):
        return "<Aa:{} - {}>".format(self.id_a,self.type_file)

在名为 AA 的类中,我想要有 2 个 primary_key 字段:“type_file”(这是我的“文件”字段的类型 - 可能的值“type_a”或“type_b”)和“id_bb”(与唯一表 Bb 的 id / 唯一项)。我希望条目在 teh coupte (id_bb,type_fichier) 中是唯一的

我还使用 Flask-admin 模块开发了一个 UI。 在此 UI 上,我希望能够在名为“AA”的表中添加一个项目。所以我写道:

# All imports 
from flask_admin.contrib.sqla import ModelView
from .models import Aa

from . import db
from flask import current_app as app

# Classes
def init_admin_views(admin):
    class AaAdmin(ModelView):   

        column_display_pk = True
        column_list = ('id_bb','file','type_file')
        column_searchable_list = column_list
        column_hide_backrefs = False
        form_widget_args = {
        }

        def on_model_change(self,form,model,is_created):
            # Makes some changes here
            db.session.add(...)
            db.session.commit()
            return model

        def delete_model(self,model):
            try:
                # Makes some changes here
                db.session.add(...)
                db.session.commit()
            except Exception as exc:
                if not self.handle_view_exception(exc):
                    raise exc
            return True  

    admin.add_view(AaAdmin(model=Aa,session=db.session,category='Tables',name="Aa",endpoint="aa_admin"))
    
# Initialization of my UI using init_admin_view on my Flask app object

最后,当我部署我的应用程序并进入页面以在我的数据库添加一个新项目时,我可以看到字段“id_bb”、“文件”但看不到字段“file_type”

文档说这是因为我在“file_type”上的 primary_key 选项,但我无法删除它,因为我需要对 id_bb 和 file_type 的唯一性约束

关于这个主题的帖子不多,所以我在寻找一些帮助来解决这个问题并解决这个问题。

我需要的是能够使用 Flask-admin 模型视图 UI -> sqlAlchemy 数据库添加项目(字段 'id_bb'、'file' 和 'file_type')。

你能帮我吗? :)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。