5
我一直在尋找最佳實踐,但是我沒有找到它。我甚至找不到需要其他人使用的解決方案。基於其他字段在Django的用戶模型中自動創建用戶名
我需要基於他的其他數據(名字&姓)的用戶的用戶名,可選附加末整數,直到我得到的唯一的用戶名。
我非常喜歡在模型中做這件事。有沒有一些標準的方法來做到這一點?或者它只適用於形式?我一直在研究各種User
模型方法的超載以及信號,並且沒有找到任何可以添加的地方。
我一直在尋找最佳實踐,但是我沒有找到它。我甚至找不到需要其他人使用的解決方案。基於其他字段在Django的用戶模型中自動創建用戶名
我需要基於他的其他數據(名字&姓)的用戶的用戶名,可選附加末整數,直到我得到的唯一的用戶名。
我非常喜歡在模型中做這件事。有沒有一些標準的方法來做到這一點?或者它只適用於形式?我一直在研究各種User
模型方法的超載以及信號,並且沒有找到任何可以添加的地方。
一個可能的解決方案可能是通過pre_save信號。
def my_callback(sender, **kwargs):
obj = kwargs['instance']
if not obj.id:
username = get_unique_username(obj) # method that combines first name and last name then query on User model, if record found, will append integer 1 and then query again, until found unique username
obj.username = username
pre_save.connect(my_callback, sender=User)
我正在考慮使用它,但我關心的是什麼形式可以做到這一點。表單在調用'save()'之前驗證輸入,所以該字段將被視爲無效。順便說一句。 'obj.save()'也會調用'pre_save'信號,所以我應該刪除它(或者替換掉其他的東西)。 – Tadeck 2012-07-25 12:41:27
您的解決方案有效,但並非總是如此(如果驗證在保存前處理,我們運氣不好),需要調整(刪除'obj.save()',如果我們正在更新現有模型,'get_unique_username'也應該有效) 。一般來說,我認爲沒有更好的方法來做到這一點,所以你的答案是可以接受的。謝謝。 – Tadeck 2012-07-25 14:50:46
@Tadeck看到答案,現在它處理您的指出的問題。 – Ahsan 2012-07-25 15:23:47