我正在爲基於Flask的項目使用Flask-Admin。其中,我有一些模型(使用peewee),其中主鍵是用戶設置的,例如的username
。但是Flask-Admin不在模型的創建/編輯頁面中顯示這些字段。讓主鍵字段在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)
這裏是我的管理代碼:
試行東西
我後來又嘗試過重寫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
錯誤。
我的猜測是我在錯誤的地方完成了重寫,字段顯示在窗體中,但不在保存方法中。在文檔中我找不到任何提及:有人知道如何做到這一點嗎?
你所得到的'peewee.UserDoesNotExist'的原因很可能是因爲更改用戶名後生成的SQL是一樣的東西'UPDATE some_table SET(...)WHERE ID = new_username'這顯然沒有按不存在。我強烈建議不要使用用戶設置的主ID。使用自動遞增的整數id更安全和簡單。 – IanAuld
您通過編輯主鍵爲您和您的數據庫創建了大量不必要的工作。堅持使用整數或UUID,併爲需要唯一的有意義字段(如用戶名)使用唯一約束。 – dirn