2016-06-07 2 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, это тривиально, чтобы отображать их, объединяя их вместе. Нет необходимости сохранять его в базе данных, и вам не следует.

Edit: Вы можете произвести любые пользовательские комбинации полей, просто добавив метод модели, например:

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 на моей форме опре на моих views.py

post.id_doctor = form['name_doctor'].value() + form['last_doctor'].value() 
       post.save() 
Смежные вопросы