Python 使用筛选器按查询设置表单字段的值
我想使用表单中的查询在下拉列表中设置项。我想添加员工,并选择使用筛选器为0的公司。我不知道如何设置下拉列表的值以及在何处编写此查询 我试图输入Forms.py,但它不起作用 这是form.pyPython 使用筛选器按查询设置表单字段的值,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我想使用表单中的查询在下拉列表中设置项。我想添加员工,并选择使用筛选器为0的公司。我不知道如何设置下拉列表的值以及在何处编写此查询 我试图输入Forms.py,但它不起作用 这是form.py class EmployeeCreateForm(forms.ModelForm): class Meta: model = Employee fields = ('Emp_Name','Emp_company','Emp_Dept','Emp_Join_Date
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)
下面是我的看法
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_class=EmployeeCreateForm。
原因是表单在CreateView中不执行任何操作。要使用自定义表单类,需要将其传递给表单类
您的CreateView使用modelform\u工厂动态创建表单,其中包含您定义的字段(如果您没有添加这些字段,您会立即看到错误),因此您的EmployeeCreateForm从未实例化过。什么不起作用?请具体说明您看到了什么或出现了什么错误。仅仅“它不起作用”是不够的。不会显示错误,但会显示所有公司,而不是只显示过滤过的公司。这意味着筛选查询不起作用。Emp_company是员工模型中的ForeignKey字段吗?为什么您的查询集中有.value'id',您想向用户显示id列表而不是公司名称吗?是的,您是正确的,Emp_company是外键,我想显示公司名称。对不起,我是Django的新手,所以我需要删除.id值吗?你的意思是我应该使用Company.objects.filterIs\u Del=0吗?我不知道我应该在哪里以及如何写这篇文章?除了值“id”之外,你做得很正确,这就是为什么我问你看到了什么。注意:你可以完全从EmployeeCreateForm中删除CleaneSelf方法,因为它根本不做任何事情。无论如何都会调用超类的方法。是的,你是对的。它在没有清洗的情况下工作得非常好