Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用筛选器按查询设置表单字段的值_Python_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

Python 使用筛选器按查询设置表单字段的值

Python 使用筛选器按查询设置表单字段的值,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

我想使用表单中的查询在下拉列表中设置项。我想添加员工,并选择使用筛选器为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)
下面是我的看法

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方法,因为它根本不做任何事情。无论如何都会调用超类的方法。是的,你是对的。它在没有清洗的情况下工作得非常好