python - 在 Flask-Admin 中使主键字段可编辑

标签 python flask peewee flask-admin

我正在为基于 Flask 的项目使用 Flask-Admin。在其中,我有一些模型(使用 peewee),其中主键是用户设置的,例如 Userusername。然而,Flask-Admin 并未在模型的创建/编辑页面中显示这些字段。

现在,当我尝试创建一个新用户时,“保存”按钮给出了一个 peewee.UserDoesNotExist 错误,并且“保存并添加”两次显示“记录成功创建”但没有实际上什么都不做。

我已经扩展了 save() 方法以在未设置的情况下从名称自动生成用户名,但即使我删除了重写,问题仍然存在。

代码...

这是我的用户模型的样子:

# import peewee as pw

class User(BaseModel, UserMixin):
    username = pw.CharField(32, primary_key=True)
    password = pw.CharField(512, null=True)
    name = pw.CharField(64)

    # ... other fields not shown ... #

    def save(self, *args, **kwargs):
        # Set the username if field is blank
        if self.username == 'auto' or not self.username:
            self.username = self.name.replace(' ', '').lower()
        # Do the real save
        super(User, self).save(*args, **kwargs)

这是我的管理代码:

# from flask_admin.contrib.peewee.view import ModelView

class AdminModelUser(ModelView):
    can_create = True
    column_list = ('username', 'name', 'group', 'active')

admin.add_view(AdminModelUser(User, name='Users', category='Accounts'))

尝试一些东西

我后来尝试覆盖 get_form() 方法,直接使用 wtfpeewee 并允许 pk,如下所示:

# from wtfpeewee.orm import model_form
class AdminModelUser(ModelView):
    ...        
    def get_form(self):
        return model_form(User, allow_pk=True)

现在字段显示出来了,但是保存还是不行。当我编辑现有用户的用户名时,管理员说“记录已成功保存”,但它没有被保存。当我尝试创建新用户时,我仍然收到 peewee.UserDoesNotExist 错误。

我的猜测是我在错误的地方进行了重写,字段显示在表单中而不是保存方法中。我在文档中找不到对此的任何提及:有人知道该怎么做吗?

最佳答案

当您有一个非整数主键时,您必须使用 force_insert=True 调用 save() 以添加新行。

http://docs.peewee-orm.com/en/latest/peewee/models.html#non-integer-primary-keys-composite-keys-and-other-tricks

关于python - 在 Flask-Admin 中使主键字段可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31207704/

相关文章:

python - 如何使用在 gunicorn 上运行的 pycharm 2.x 调试 flask.app

python - Peewee+sqlite可以做递归CTE查询吗?

python - Peewee - 基数为 10 的 int() 的无效文字 : '' when looping over query

python - 检测列表中的相同值

python - Seaborn 对角相关矩阵跳过第一行和最后一列

python - 无法再为 requirements.txt 文件中的 Google Cloud Dataflow 作业安装 `google-cloud-datastore` 依赖项

python - Flask-Sqlalchemy 多个数据库(绑定(bind))具有相同的模型(类 DB.Model)

python - 使用flask,如何以列表形式返回一行数据

python - peewee.OperationalError : no such function: json

python - 读取带有单引号数据的文件并将其存储在 python 列表中