在 Flask-Admin 中使主键字段可编辑
Make primary-key fields editable in Flask-Admin
我正在为基于 Flask 的项目使用 Flask-Admin。在其中,我有一些模型(使用 peewee),其中主键是用户设置的,例如 username
对应 User
。但是 Flask-Admin 没有在模型的 create/edit 页面中显示这些字段。
现在,当我尝试创建新用户时,"Save" 按钮出现 peewee.UserDoesNotExist
错误,"Save & Add" 说 "Record successfully created" 两次但没有实际上做任何事情。
我已经扩展了 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)
现在字段显示出来了,但是保存还是不行。当我编辑现有用户的用户名时,管理员说 "Record was successfully saved",但它没有被保存。当我尝试创建新用户时,我仍然收到 peewee.UserDoesNotExist
错误。
我的猜测是我在错误的地方进行了重写,字段显示在表单中而不是保存方法中。我在文档中找不到对此的任何提及:有人知道该怎么做吗?
当你有一个非整数主键时,你必须调用 save()
和 force_insert=True
来添加一个新行。
我正在为基于 Flask 的项目使用 Flask-Admin。在其中,我有一些模型(使用 peewee),其中主键是用户设置的,例如 username
对应 User
。但是 Flask-Admin 没有在模型的 create/edit 页面中显示这些字段。
现在,当我尝试创建新用户时,"Save" 按钮出现 peewee.UserDoesNotExist
错误,"Save & Add" 说 "Record successfully created" 两次但没有实际上做任何事情。
我已经扩展了 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)
现在字段显示出来了,但是保存还是不行。当我编辑现有用户的用户名时,管理员说 "Record was successfully saved",但它没有被保存。当我尝试创建新用户时,我仍然收到 peewee.UserDoesNotExist
错误。
我的猜测是我在错误的地方进行了重写,字段显示在表单中而不是保存方法中。我在文档中找不到对此的任何提及:有人知道该怎么做吗?
当你有一个非整数主键时,你必须调用 save()
和 force_insert=True
来添加一个新行。