Django 数据库查询在 views.py 和 shell 中的行为方式不同
Django db query not behaving the same way in views.py and shell
我正在尝试生成一个查询,我在 django shell 中得到了预期的结果,但是对于同一个查询,我收到一个错误,指出模型的属性不存在。
首先是shell:
>>> from dbaccess.models import *
>>> applicantObject = Applicant.objects.get(pk=5)
>>> vol = VolInterview.objects.get(applicant=applicantObject)
>>> vol
<VolInterview: Rajon>
来自views.py
from models import *
def addIntCandidate(request):
applicants = Applicant.objects.filter(applicationStatus="Pending")
interviews = Interview.objects.all()
message = []
if request.method == 'POST':
applicant = request.POST.get('applicant')
...
# the value of applicant at this point is 5
applicantObject = Applicant.objects.get(pk=applicant)
prevRejected = VolInterview.objects.get(applicant=applicantObject)
...
错误信息:
type object 'VolInterview' has no attribute 'objects'
回溯:
E:\projects_directory\djangoprojects\kpr-admin-db\dbaccess\views.py in addIntCandidate
prevRejected = VolInterview.objects.get(applicant=applicantObject)
我做错了什么?
您似乎已将视图中的 VolInterview
替换为不同的 class。
要检查,您可以将 print(VolInterview)
添加到您的视图和 shell,并检查您在两者中获得的结果是否相同。
在 Django 中,通常使用 Form
作为表单的后缀 classes,例如VolInterviewForm
,这样模型和表单名称就不会冲突。
我正在尝试生成一个查询,我在 django shell 中得到了预期的结果,但是对于同一个查询,我收到一个错误,指出模型的属性不存在。
首先是shell:
>>> from dbaccess.models import *
>>> applicantObject = Applicant.objects.get(pk=5)
>>> vol = VolInterview.objects.get(applicant=applicantObject)
>>> vol
<VolInterview: Rajon>
来自views.py
from models import *
def addIntCandidate(request):
applicants = Applicant.objects.filter(applicationStatus="Pending")
interviews = Interview.objects.all()
message = []
if request.method == 'POST':
applicant = request.POST.get('applicant')
...
# the value of applicant at this point is 5
applicantObject = Applicant.objects.get(pk=applicant)
prevRejected = VolInterview.objects.get(applicant=applicantObject)
...
错误信息:
type object 'VolInterview' has no attribute 'objects'
回溯:
E:\projects_directory\djangoprojects\kpr-admin-db\dbaccess\views.py in addIntCandidate
prevRejected = VolInterview.objects.get(applicant=applicantObject)
我做错了什么?
您似乎已将视图中的 VolInterview
替换为不同的 class。
要检查,您可以将 print(VolInterview)
添加到您的视图和 shell,并检查您在两者中获得的结果是否相同。
在 Django 中,通常使用 Form
作为表单的后缀 classes,例如VolInterviewForm
,这样模型和表单名称就不会冲突。