2011-06-10 81 views
2

這是我正在尋找的。在我的表單中,我有三個字段,都是CharFields。這些是名字,姓氏和用戶名。用戶名應該設置爲名稱和姓氏的總和,因此對於名稱=喬,姓=黑色,用戶名=喬布萊克。Django - 如何自動從兩個其他字段填充表單域

當窗體顯示時,所有字段全部爲空。當我將數據寫入姓名或姓氏時,我希望它自動填充用戶名。原因是我不必填寫用戶名字段,但是當我想要時,我可以將其設置爲與姓名+姓氏不同。

是否有可能不使用jQuery?如果是這樣,有沒有什麼好的教程呢?

+0

如果你想在客戶端做,你應該使用JavaScript,帶或不帶jQuery。 – DrTyrsa 2011-06-10 09:18:36

+0

這就是我正在試圖省略的。我記得在一些教程中,大約一年前我看到,有一種方法可以自動填充SlugField,但我現在無法找到它。 – Gandi 2011-06-10 09:27:07

回答

6

的JavaScript

<script type="text/javascript" charset="utf-8"> 

    function updateUsername(){ 
     first = document.getElementById("first").value; 
     last = document.getElementById("last").value; 
     document.getElementById("username").value = first+" "+last; 
    } 

</script> 

,那麼你需要給你的3輸入字段標識。

這裏的一個例子

<input type="text" name="some_name" value="" id="first" onkeyup="updateUsername();"> 
<input type="text" name="some_name" value="" id="last" onkeyup="updateUsername();"> 
<input type="text" name="some_name" value="" id="username"> 

基本上當進入它運行updateUsername()函數它得到它們的值和#username的值改變它們的#first和#last字段被鍵入。

編輯

如果你想使用Django要做到這一點,編輯您的模型,並覆蓋保存方法。

def save(self): 
    if not self.id: 
     self.username = self.first + self.last 
    super(MODLE_NAME, self).save() 

那是什麼要做的就是當你使用save()方法,它會把它的第一個和最後一個特性和更新用戶名值並保存它。

+1

其實我已經搜索了一個純粹的Django解決方案,沒有js。但是......這個很簡單,我可以明確給+1。如果沒有更好的答案(不使用js),我會接受這個。 – Gandi 2011-06-10 10:45:45

+0

你不能這樣做沒有JavaScript。最接近的其他方法是使用django的方式來保存模型,然後從名字和姓氏中自動生成用戶名。但那不會給你一個「實時打字」的感覺。 – dotty 2011-06-10 10:53:48

+0

我認爲,這個話題很多。謝謝。 – Gandi 2011-06-10 11:16:44

相關問題