首页 > 解决方案 > 使模型的第一个实例在 SQLAlchemy 中具有唯一字段

问题描述

我有一个带有User模型的 Flask + SQLAlchemy 应用程序。我想强制执行此业务逻辑:User在应用程序中创建的第一个应该是管理员(即具有字段is_admin=True),但所有其他用户默认情况下不应是管理员。

该模型看起来像这样(简化):

class User(db.Model):
    __tablename__ = "users"
    user_id = Column(Integer, primary_key=True)
    username = Column(UnicodeText, unique=True, nullable=False)
    email = Column(UnicodeText, unique=True, nullable=False)
    password = Column(UnicodeText, nullable=True)
    is_admin = Column(Boolean(), default=False)

我希望这个测试用例成功:

first = User(username="foo", email="foo@foo.com", password="foobarbaz123")
second = User(username="bar", email="bar@bar.com", password="foobarbaz123")

db.session.add_all([first, second])
db.session.commit()

assert first.is_admin
assert not second.is_admin

我尝试了几种方法:

这个业务逻辑如何实现?

标签: pythonsqlalchemy

解决方案


推荐阅读