2012-07-25 16 views
5

我一直在尋找最佳實踐,但是我沒有找到它。我甚至找不到需要其他人使用的解決方案。基於其他字段在Django的用戶模型中自動創建用戶名

我需要基於他的其他數據(名字&姓)的用戶的用戶名,可選附加末整數,直到我得到的唯一的用戶名。

我非常喜歡在模型中做這件事。有沒有一些標準的方法來做到這一點?或者它只適用於形式?我一直在研究各種User模型方法的超載以及信號,並且沒有找到任何可以添加的地方。

回答

4

一個可能的解決方案可能是通過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) 
+0

我正在考慮使用它,但我關心的是什麼形式可以做到這一點。表單在調用'save()'之前驗證輸入,所以該字段將被視爲無效。順便說一句。 'obj.save()'也會調用'pre_save'信號,所以我應該刪除它(或者替換掉其他的東西)。 – Tadeck 2012-07-25 12:41:27

+0

您的解決方案有效,但並非總是如此(如果驗證在保存前處理,我們運氣不好),需要調整(刪除'obj.save()',如果我們正在更新現有模型,'get_unique_username'也應該有效) 。一般來說,我認爲沒有更好的方法來做到這一點,所以你的答案是可以接受的。謝謝。 – Tadeck 2012-07-25 14:50:46

+0

@Tadeck看到答案,現在它處理您的指出的問題。 – Ahsan 2012-07-25 15:23:47

相關問題