Python ';QueryDict&x27;对象没有属性';用户';
我目前在Django做我的项目,我需要外键(名称)分别显示给当前用户。它显示得非常好,就像我想要的一样,但是在我提交表单时它抛出了一个错误,“QueryDict”对象没有“user”属性 错误消息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
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