通过使用查询过滤器表单字段设置值

问题描述 投票:0回答:1

我想用表单查询设置在下拉列表中的项目。我想补充员工和选择的公司,使用过滤器Is_Del = 0,我不知道如何为下拉设定值,并在写这个查询。

我试图把Forms.py,但它不工作。

这是form.py

class EmployeeCreateForm(forms.ModelForm):
     class Meta:
        model = Employee
        fields = ('Emp_Name','Emp_company','Emp_Dept','Emp_Join_Date', 'Emp_End_Date')

        def clean(self):
            cleaned_data = super(EmployeeCreateForm, self).clean()
            Emp_Name = cleaned_data.get('Emp_Name')
            Emp_company = cleaned_data.get('Emp_company')
            Emp_Dept = cleaned_data.get('Emp_Dept')
            Emp_Join_Date = cleaned_data.get('Emp_Join_Date')
            Emp_End_Date = cleaned_data.get('Emp_End_Date')
            return cleaned_data

     def __init__(self, *args, **kwargs):
        super(EmployeeCreateForm,self).__init__(*args, **kwargs)
        self.fields['Emp_company'].queryset = Company.objects.filter(Is_Del=0)

以下是我的view.py

class EmployeeCraeteView(LoginRequiredMixin,SuccessMessageMixin,CreateView):
    model=Employee
    form = EmployeeCreateForm
    success_message = " Employee Craeted successfully!"
    success_url="../../company/all-companies"
    template_name = 'employee_form.html'
    fields =[
            'Emp_Name','Emp_company','Emp_Dept','Emp_Join_Date',
            'Emp_End_Date'
            ]
    companies= Company.objects.filter(Is_Del=0)

    def form_valid(self,form):
        form.instance.Emp_Crt_By = self.request.user
        if form.cleaned_data['Emp_Join_Date'] >= form.cleaned_data['Emp_End_Date']:
            form.add_error('Emp_End_Date', 'Joining date should be less than Ending date')
            return self.form_invalid(form)
        return super(EmployeeCraeteView, self).form_valid(form)

我想只显示该公司在被Is_Del = 0过滤形式

python django django-models django-forms django-views
1个回答
1
投票

EmployeeCreateView是错误的:

  • 删除属性formfieldscompanies
  • 添加form_class = EmployeeCreateForm

其原因是,form没有做的事情CreateView(见here)。要使用自定义窗体类,你需要将它传递给form_class

CreateView被动态地创建使用你所定义的modelform_factory一个fields形式(如果你还没有加入那些你已经看到了马上你的错误),并让你的EmployeeCreateForm从不实例。

© www.soinside.com 2019 - 2024. All rights reserved.