我想使用表格中的查询在下拉菜单中设置项目。我想添加使用过滤器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过滤的公司
答案 0 :(得分:1)
您的EmployeeCreateView
是错误的:
form
,fields
和companies
form_class = EmployeeCreateForm
。原因是form
在CreateView
中没有执行任何操作(请参阅here)。要使用自定义表单类,您需要将其传递给form_class
。
您的CreateView
是使用modelform_factory
和您定义的fields
动态创建表单的(如果您没有添加这些表单,则会立即看到错误),因此您的EmployeeCreateForm
从未实例化。