2016-10-10 7 views
0

Проблема у меня есть с одним полем, которое я добавил.Django 1.9 form inheritance on UpdateView

У меня есть форма:



    class employeesForm(forms.ModelForm): 
     class Meta: 
      fields = [ 
       'num_employee', 
       'id_ignition', 
       'fullName', 
       'shortName', 
       'salary', 
       'gender', 
       'rfc', 
       'imss', 
       'curp', 
       'birthday', 
       'initday', 
       'id_costCenter', 
       'id_jobCode', 
       'id_status', 
       'nationality', 
       'picture', 
       'source', 
      ] 


      widgets = { 
       'num_employee': forms.NumberInput(attrs={'class': 'form-control', 'name': 'num_employee'}), 
       'id_ignition': forms.NumberInput(attrs={'class': 'form-control', 'name': 'id_ignition'}), 
       'fullName': forms.TextInput(attrs={'class': 'form-control', 'name': 'fullName', 'placeholder': 'Angel Rafael Ortega Vazquez'}), 
       'shortName': forms.TextInput(attrs={'class': 'form-control', 'name': 'shortName', 'placeholder': 'Rafael Ortega'}), 
       'salary': forms.NumberInput(attrs={'class': 'form-control', 'name': 'salary', 'placeholder': '5000'}), 
       'gender': forms.CheckboxInput(attrs={'class': 'form-control', 'name': 'gender'}), 
       'rfc': forms.TextInput(attrs={'class': 'form-control', 'name': 'rfc', 'id': 'rfc'}), 
       'imss': forms.TextInput(attrs={'class': 'form-control', 'name': 'imss', 'id': 'imss'}), 
       'curp': forms.TextInput(attrs={'class': 'form-control', 'name': 'curp'}), 
       'birthday': forms.DateInput(attrs={'class': 'form-control', 'name': 'birthday'}), 
       'initday': forms.DateInput(attrs={'class': 'form-control', 'name': 'initday'}), 
       'id_costCenter': forms.Select(attrs={'class': 'form-control', 'name': 'id_costCenter'}), 
       'id_jobCode': forms.Select(attrs={'class': 'form-control', 'name': 'id_jobCode'}), 
       'id_status': forms.Select(attrs={'class': 'form-control', 'name': 'id_status'}), 
       'nationality': forms.Select(attrs={'class': 'form-control', 'name': 'nationality'}), 
       'picture': forms.ClearableFileInput(attrs={'class': 'form-control', 'name': 'picture'}), 
       'source': forms.Select(attrs={'class': 'form-control', 'name': 'source'}), 
      } 

В моей модели у меня есть дополнительное поле (древность), но я игнорирую его здесь, потому что в моем CreateView я заполнить это поле на основе других параметров (античность = initday).

Все работало хорошо, пока я не нужно, чтобы создать UpdateView с этим дополнительным полем предварительно заселена, что я сделал, чтобы наследовать превью формы и добавив, что дополнительное поле:



    class Enhanced_employeesForm(employeesForm): 

     antiquity = forms.CharField(
      widget=forms.DateInput(attrs={'class': 'form-control', 'name': 'antiquity'})) 

Он сделал вещь, поле ввода отображается в моем шаблоне, но пока все предварительно заполнено информацией, основанной на id, мое поле античности пусто.

Это единственное, что я не хватает в моей конфигурации, потому что Джанго даже обнаружить, когда это поле пустым на покориться и предотвратить обновление базы данных

Я пытался делать что-то вроде:

form.antiquity(instance=Employees.objects.get(pk=self.kwargs['pk'])) 

Но ошибка говорит, что объект «Enhanced_employeesForm» не имеет атрибута «древность».

ответ

0

я делал это неправильно, я должен был добавить этот код в моей расширенной форме:

class Enhanced_employeesForm(employeesForm): 
    class Meta(employeesForm.Meta): 
     employeesForm.Meta.fields += ['antiquity'] 

и сделал вещь.

если вам нужны виджеты вы можете заметить, что все перекрываться, чтобы предотвратить, что вам нужно это:

employeesForm.Meta.widgets['antiquity'] = forms.DateInput(attrs={'class': 'form-control'})