Python ';QueryDict&x27;对象没有属性';用户';

Python ';QueryDict&x27;对象没有属性';用户';,python,django,Python,Django,我目前在Django做我的项目,我需要外键(名称)分别显示给当前用户。它显示得非常好,就像我想要的一样,但是在我提交表单时它抛出了一个错误,“QueryDict”对象没有“user”属性 错误消息 Traceback (most recent call last): File "C:\Users\KARTHICK\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.p

我目前在Django做我的项目,我需要外键(名称)分别显示给当前用户。它显示得非常好,就像我想要的一样,但是在我提交表单时它抛出了一个错误,“QueryDict”对象没有“user”属性

错误消息

Traceback (most recent call last):
File "C:\Users\KARTHICK\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\KARTHICK\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\KARTHICK\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\KARTHICK\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "F:\TECH\emp\crm\employee\views.py", line 26, in employee_form
form = EmployeeForm(request.POST)
File "F:\TECH\emp\crm\employee\forms.py", line 40, in __init__
self.fields['designation'].queryset = req.user.designation.all()
AttributeError: 'QueryDict' object has no attribute 'user'
[16/Mar/2020 13:06:45] "POST /employee/add/ HTTP/1.1" 500 78894
型号.py

class Designation(models.Model):
     user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="designation",null=True,blank=True)
     title = models.CharField(max_length=100)
class Employee(models.Model):
     user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="employee",null=True,blank=True)                                                           
     designation = models.ForeignKey(Designation,on_delete=models.CASCADE)
def __init__(self,req,*args,**kwargs):
    super(EmployeeForm,self).__init__(*args,**kwargs)
    self.fields['designation'].queryset = req.user.designation.all()
 def employee_form(request,id=0):
  if request.method == 'GET':
    if id == 0:       
        req = request.user.designation.all()     
        form = EmployeeForm(req)
    else:

        employee = Employee.objects.get(pk=id)
        if employee in request.user.employee.all():
            form = EmployeeForm(request,instance=employee)
        else:
            return redirect('/employee')
    return render(request,'employee-form.html',{'form':form})
else:
    if id==0:
        form = EmployeeForm(request.POST)
    else:

        employee = Employee.objects.get(pk=id)
        if employee in request.user.employee.all():
            form = EmployeeForm(request.POST,instance=employee)
    if form.is_valid():
        n = form.cleaned_data["name"]
        t = Employee(name=n)
        t.save()
        request.user.employee.add(t)

    return redirect('/employee')
form = EmployeeForm(request,request.POST)
forms.py

class Designation(models.Model):
     user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="designation",null=True,blank=True)
     title = models.CharField(max_length=100)
class Employee(models.Model):
     user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="employee",null=True,blank=True)                                                           
     designation = models.ForeignKey(Designation,on_delete=models.CASCADE)
def __init__(self,req,*args,**kwargs):
    super(EmployeeForm,self).__init__(*args,**kwargs)
    self.fields['designation'].queryset = req.user.designation.all()
 def employee_form(request,id=0):
  if request.method == 'GET':
    if id == 0:       
        req = request.user.designation.all()     
        form = EmployeeForm(req)
    else:

        employee = Employee.objects.get(pk=id)
        if employee in request.user.employee.all():
            form = EmployeeForm(request,instance=employee)
        else:
            return redirect('/employee')
    return render(request,'employee-form.html',{'form':form})
else:
    if id==0:
        form = EmployeeForm(request.POST)
    else:

        employee = Employee.objects.get(pk=id)
        if employee in request.user.employee.all():
            form = EmployeeForm(request.POST,instance=employee)
    if form.is_valid():
        n = form.cleaned_data["name"]
        t = Employee(name=n)
        t.save()
        request.user.employee.add(t)

    return redirect('/employee')
form = EmployeeForm(request,request.POST)
视图.py

class Designation(models.Model):
     user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="designation",null=True,blank=True)
     title = models.CharField(max_length=100)
class Employee(models.Model):
     user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="employee",null=True,blank=True)                                                           
     designation = models.ForeignKey(Designation,on_delete=models.CASCADE)
def __init__(self,req,*args,**kwargs):
    super(EmployeeForm,self).__init__(*args,**kwargs)
    self.fields['designation'].queryset = req.user.designation.all()
 def employee_form(request,id=0):
  if request.method == 'GET':
    if id == 0:       
        req = request.user.designation.all()     
        form = EmployeeForm(req)
    else:

        employee = Employee.objects.get(pk=id)
        if employee in request.user.employee.all():
            form = EmployeeForm(request,instance=employee)
        else:
            return redirect('/employee')
    return render(request,'employee-form.html',{'form':form})
else:
    if id==0:
        form = EmployeeForm(request.POST)
    else:

        employee = Employee.objects.get(pk=id)
        if employee in request.user.employee.all():
            form = EmployeeForm(request.POST,instance=employee)
    if form.is_valid():
        n = form.cleaned_data["name"]
        t = Employee(name=n)
        t.save()
        request.user.employee.add(t)

    return redirect('/employee')
form = EmployeeForm(request,request.POST)
in views.py

def employee_form(request,id=0):
  if request.method == 'GET':
    if id == 0:       
        req = request.user.designation.all() //but here you are passing queryset    
        form = EmployeeForm(req)
因此,不要使用
form=EmployeeForm(req)
而使用
form=EmployeeForm(request)
form=EmployeeForm(request.user)
更改

form = EmployeeForm(req)


您的
员工
表单需要一个请求对象作为参数,但您向它传递了一个
名称的查询集

谢谢大家的回复。我设法消除了这个错误。我没有在POST方法中传递请求参数

视图.py

class Designation(models.Model):
     user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="designation",null=True,blank=True)
     title = models.CharField(max_length=100)
class Employee(models.Model):
     user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="employee",null=True,blank=True)                                                           
     designation = models.ForeignKey(Designation,on_delete=models.CASCADE)
def __init__(self,req,*args,**kwargs):
    super(EmployeeForm,self).__init__(*args,**kwargs)
    self.fields['designation'].queryset = req.user.designation.all()
 def employee_form(request,id=0):
  if request.method == 'GET':
    if id == 0:       
        req = request.user.designation.all()     
        form = EmployeeForm(req)
    else:

        employee = Employee.objects.get(pk=id)
        if employee in request.user.employee.all():
            form = EmployeeForm(request,instance=employee)
        else:
            return redirect('/employee')
    return render(request,'employee-form.html',{'form':form})
else:
    if id==0:
        form = EmployeeForm(request.POST)
    else:

        employee = Employee.objects.get(pk=id)
        if employee in request.user.employee.all():
            form = EmployeeForm(request.POST,instance=employee)
    if form.is_valid():
        n = form.cleaned_data["name"]
        t = Employee(name=n)
        t.save()
        request.user.employee.add(t)

    return redirect('/employee')
form = EmployeeForm(request,request.POST)

谢谢你的回答:),但我也试过了,错误仍然是一样的。谢谢你的回答,我已经传递了参数'request',并将forms.py更改如下,self.fields['designation'].queryset=designation.objects.filter(user=req.user)仍然得到相同的错误。但是外键是根据用户进行完美过滤的,在提交表单时,它会抛出与您希望在表单中执行的相同的错误,因为问题出在表单的init方法
self.fields['designation'].queryset=req.user.designation.all()
我已经纠正了错误bro!。。。但它抛出了另一个错误NOTNULL约束失败:emp_employee.designation_ids显示完整的错误跟踪和更多代码,以便我们可以跟踪所涉及的名称(
req
request
DesignationForm
)。添加了更多代码,我希望这将有助于跟踪错误。感谢您的回答,我已经传递了参数'request',并将forms.py更改如下,self.fields['designment'].queryset=designation.objects.filter(user=req.user)仍然得到了与抛出另一个错误相同的错误---非空约束失败:emp_employee.designation_id