【问题标题】:Django 1.9 form inheritance on UpdateViewUpdateView 上的 Django 1.9 表单继承
【发布时间】:2017-02-19 11:07:17
【问题描述】:

我遇到的问题是我添加的单个字段。

我有我的表格:



    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 的信息,但我的 antiquity 字段是空的。

这是我的配置中唯一缺少的东西,因为 django 甚至会在提交时检测该字段何时为空并阻止对数据库的任何更新

我尝试做类似的事情:

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

但错误提示“Enhanced_employeesForm”对象没有“古代”属性。

【问题讨论】:

    标签: python inheritance django-forms django-views django-1.9


    【解决方案1】:

    我做错了,我必须将此代码添加到我的增强表单中:

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

    这就是事情的发生。

    如果您需要小部件,您可能会注意到所有内容都被覆盖,以防止您需要这个:

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

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 2011-05-14
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 2018-05-10
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多