2016-06-07 59 views
0

我希望你可以幫我解決這個問題,我一直在嘗試使用同一表單上的兩個字段的連接來自動填充字段,但沒有成功,這是我的模型和我的形式如何在django中自動填充字段

class Doctor(models.Model): 
    name_doctor = models.CharField(max_length=20) 
    last_doctor = models.CharField(max_length=20) 
    email_doctor = models.EmailField() 
    p_doctor = models.CharField(max_length=10) 
    id_doctor = models.CharField(max_length=30, blank=True) 

    def __str__(self): 
     return '%s %s' % (self.name_doctor, self.last_doctor) 

我的形式:

class ADoctor(forms.ModelForm): 
    class Meta: 
     model = Doctor 
     fields = ('name_doctor', 'last_doctor', 'email_doctor', 'p_doctor', 'id_doctor') 
     labels = { 
      'name_doctor': ('Name'), 
      'last_doctor': ('Last name'), 
      'email_doctor': ('Email'), 
      'p_doctor': ('Phone'), 
      'id_doctor': ('ID'), 
     } 

我如何可以覆蓋保存,這樣,當我發送的形式現場id_doctor與name_doctor + last_doctor的串聯填補?

+0

因爲這需要發生在客戶端,所以用JavaScript做到這一點。否則,如果用戶不需要編輯該字段,請在視圖中重新創建ID字段。 – Vernon

回答

2

答案是:不要打擾。

只要您可以根據表格上的一個或多個字段的內容生成某些數據項,則無需爲其創建另一個字段。而你的name_doctor + last_doctor就是這樣一個典型的例子。

您的模型已經有一個name_doctor字段以及一個last_doctor字段,通過將它們組合在一起來顯示它們是一件小事。沒有必要將它保存到數據庫,你不應該。

編輯:您可以只需添加一個方法的典範生產領域的任何自定義組合:

class Doctor(models.Model): 


    def concat_fields(self): 
      return self.name_doctor + self.last_doctor 

    def quasi_unique_id(self): 
      return self.name_doctor[0:2] + self.last_doctor[0:2] + id_order(some_other_model) 
+0

我這樣做是因爲在實現這個之後,我想根據名稱的前兩個字母和姓氏的兩個字母加上一個數字來生成自定義標籤。 –

+0

我的答案仍然有效。你可以用name_doctor和last_doctor字段來做到這一點 – e4c5

+0

但我仍然需要將它存儲在模型的一個字段上,以便能夠在不同的模型和視圖上使用該信息來添加額外的信息。 –

0

解決,我只是我post.save前加入這個在我的形式DEF在我的views.py

post.id_doctor = form['name_doctor'].value() + form['last_doctor'].value() 
       post.save()