2015-07-03 144 views
3

我正在爲基於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錯誤。

我的猜測是我在錯誤的地方完成了重寫,字段顯示在窗體中,但不在保存方法中。在文檔中我找不到任何提及:有人知道如何做到這一點嗎?

+0

你所得到的'peewee.UserDoesNotExist'的原因很可能是因爲更改用戶名後生成的SQL是一樣的東西'UPDATE some_table SET(...)WHERE ID = new_username'這顯然沒有按不存在。我強烈建議不要使用用戶設置的主ID。使用自動遞增的整數id更安全和簡單。 – IanAuld

+2

您通過編輯主鍵爲您和您的數據庫創建了大量不必要的工作。堅持使用整數或UUID,併爲需要唯一的有意義字段(如用戶名)使用唯一約束。 – dirn

回答