2016-06-07 62 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()