Django 1.9 在 UpdateView 上形成继承
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'}),
}
在我的模型中,我有一个额外的字段 (antiquity),但我在这里忽略了它,因为在我的 CreateView 中,我根据其他参数 (antiquity = initday) 填充了该字段。
一切正常,直到我需要创建一个预填充该额外字段的 UpdateView,我所做的是继承预览表单并添加该额外字段:
class Enhanced_employeesForm(employeesForm):
antiquity = forms.CharField(
widget=forms.DateInput(attrs={'class': 'form-control', 'name': 'antiquity'}))
它做到了,输入字段呈现在我的模板中,但是虽然所有内容都预先填充了基于 id 的信息,但我的古代字段是空的。
这是我的配置中唯一缺少的东西,因为 django 甚至会在提交时检测该字段何时为空并阻止对数据库进行任何更新
我试过做类似的事情:
form.antiquity(instance=Employees.objects.get(pk=self.kwargs['pk']))
但是错误说'Enhanced_employeesForm'对象没有属性'antiquity'。
我做错了,我不得不将这段代码添加到我的增强形式中:
class Enhanced_employeesForm(employeesForm):
class Meta(employeesForm.Meta):
employeesForm.Meta.fields += ['antiquity']
这就是事情。
如果您需要小部件,您可能会注意到一切都被覆盖了,以防止您需要这个:
employeesForm.Meta.widgets['antiquity'] = forms.DateInput(attrs={'class': 'form-control'})
我遇到的问题是我添加的单个字段。
我有我的表格:
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'}),
}
在我的模型中,我有一个额外的字段 (antiquity),但我在这里忽略了它,因为在我的 CreateView 中,我根据其他参数 (antiquity = initday) 填充了该字段。
一切正常,直到我需要创建一个预填充该额外字段的 UpdateView,我所做的是继承预览表单并添加该额外字段:
class Enhanced_employeesForm(employeesForm):
antiquity = forms.CharField(
widget=forms.DateInput(attrs={'class': 'form-control', 'name': 'antiquity'}))
它做到了,输入字段呈现在我的模板中,但是虽然所有内容都预先填充了基于 id 的信息,但我的古代字段是空的。
这是我的配置中唯一缺少的东西,因为 django 甚至会在提交时检测该字段何时为空并阻止对数据库进行任何更新
我试过做类似的事情:
form.antiquity(instance=Employees.objects.get(pk=self.kwargs['pk']))
但是错误说'Enhanced_employeesForm'对象没有属性'antiquity'。
我做错了,我不得不将这段代码添加到我的增强形式中:
class Enhanced_employeesForm(employeesForm):
class Meta(employeesForm.Meta):
employeesForm.Meta.fields += ['antiquity']
这就是事情。
如果您需要小部件,您可能会注意到一切都被覆盖了,以防止您需要这个:
employeesForm.Meta.widgets['antiquity'] = forms.DateInput(attrs={'class': 'form-control'})