我想用表单查询设置在下拉列表中的项目。我想补充员工和选择的公司,使用过滤器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过滤形式
你EmployeeCreateView
是错误的:
form
,fields
和companies
form_class = EmployeeCreateForm
。其原因是,form
没有做的事情CreateView
(见here)。要使用自定义窗体类,你需要将它传递给form_class
。
你CreateView
被动态地创建使用你所定义的modelform_factory
一个fields
形式(如果你还没有加入那些你已经看到了马上你的错误),并让你的EmployeeCreateForm
从不实例。