Python Django属性错误:';int';对象没有属性';论文题目';-Django测验应用程序
在将Django测验应用程序集成到我的项目中时,我一直遇到这个错误,不知道如何解决它。我可以创建测验并在列表中看到它们,但只要我按下“开始测验”按钮,就会出现这个错误。我需要在我的项目中改变什么来解决这个问题 以下是完整的回溯:Python Django属性错误:';int';对象没有属性';论文题目';-Django测验应用程序,python,django,Python,Django,在将Django测验应用程序集成到我的项目中时,我一直遇到这个错误,不知道如何解决它。我可以创建测验并在列表中看到它们,但只要我按下“开始测验”按钮,就会出现这个错误。我需要在我的项目中改变什么来解决这个问题 以下是完整的回溯: Environment: Request Method: GET Request URL: http://127.0.0.1:8000/quizzes/testquiz/take/ Django Version: 1.9.1 Python Version: 2.7.
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/quizzes/testquiz/take/
Django Version: 1.9.1
Python Version: 2.7.10
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
'essay',
'quiz',
'multichoice',
'true_false',
'bootstrapform']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "/home/john/.virtualenvs/lfs/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/home/john/.virtualenvs/lfs/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/john/.virtualenvs/lfs/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "/home/john/myapp/quiz/views.py" in dispatch
148. self.quiz)
File "/home/john/myapp/quiz/models.py" in user_sitting
341. sitting = self.new_sitting(user, quiz)
File "/home/john/myapp/quiz/models.py" in new_sitting
312. if len(question_set) == 0:
File "/home/john/.virtualenvs/lfs/local/lib/python2.7/site-packages/django/db/models/query.py" in __len__
240. self._fetch_all()
File "/home/john/.virtualenvs/lfs/local/lib/python2.7/site-packages/django/db/models/query.py" in _fetch_all
1074. self._result_cache = list(self.iterator())
File "/home/john/.virtualenvs/lfs/local/lib/python2.7/site-packages/model_utils/managers.py" in iterator
80. sub_obj = self._get_sub_obj_recurse(obj, s)
File "/home/john/.virtualenvs/lfs/local/lib/python2.7/site-packages/model_utils/managers.py" in _get_sub_obj_recurse
153. node = getattr(obj, rel)
Exception Type: AttributeError at /quizzes/testquiz/take/
Exception Value: 'int' object has no attribute 'essay_question'
以下是散文应用程序的模型:
from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext as _
from quiz.models import Question
@python_2_unicode_compatible
class Essay_Question(Question):
def check_if_correct(self, guess):
return False
def get_answers(self):
return False
def get_answers_list(self):
return False
def answer_choice_to_string(self, guess):
return str(guess)
def __str__(self):
return self.content
class Meta:
verbose_name = _("Essay style question")
verbose_name_plural = _("Essay style questions")
编辑:以下是问题模型:
@python_2_unicode_compatible
class Question(models.Model):
"""
Base class for all question types.
Shared properties placed here.
"""
quiz = models.ManyToManyField(Quiz,
verbose_name=_("Quiz"),
blank=True)
category = models.ForeignKey(Category,
verbose_name=_("Category"),
blank=True,
null=True)
sub_category = models.ForeignKey(SubCategory,
verbose_name=_("Sub-Category"),
blank=True,
null=True)
figure = models.ImageField(upload_to='uploads/%Y/%m/%d',
blank=True,
null=True,
verbose_name=_("Figure"))
content = models.CharField(max_length=1000,
blank=False,
help_text=_("Enter the question text that "
"you want displayed"),
verbose_name=_('Question'))
explanation = models.TextField(max_length=2000,
blank=True,
help_text=_("Explanation to be shown "
"after the question has "
"been answered."),
verbose_name=_('Explanation'))
objects = InheritanceManager()
class Meta:
verbose_name = _("Question")
verbose_name_plural = _("Questions")
ordering = ['category']
def __str__(self):
return self.content
其他模型和视图可在此处找到:
非常感谢您的帮助。仔细查看您的代码,我认为问题出在您的坐席经理身上。你正在做:
question_set = question_set.values_list('id', flat=True)
if len(question_set) == 0:
...
我建议:
question_ids = question_set.values_list('id', flat=True)
if question_set.count() == 0:
...
# or less performant
# if len(list(question_ids)):
# ...
并在进一步评估中使用问题ID
。
有关这方面的更多信息,请浏览文档如果您正在运行Django 1.9,这是一个,如所报告的。要解决此问题,请从第306行开始将quick/models.py中的代码更改为:
if quiz.random_order is True:
question_set = quiz.question_set.all() \
.select_subclasses() \
.order_by('?')
else:
question_set = quiz.question_set.all() \
.select_subclasses()
致:
请用
Question
@ArashHatami更新你的帖子,我更新了。这看起来可能是django_测验中的错误,而不是你的代码中的错误(我知道你已经这样做了。看看,Django 1.9似乎还不受支持。你在Django 1.8.x中测试过你的代码吗?当它试图进行相关的查找时,它失败了。在获取查询集时,只需删除select_子类
,因为你没有对它做任何事情。@karthikr非常感谢,它解决了问题。T感谢您的帮助。这有助于解决该特定错误,但也产生了一些其他错误。@karthikr建议完全解决了问题。无论如何,谢谢您,我将使用您的建议处理问题ID
,因为它更容易理解。
if quiz.random_order is True:
question_set = quiz.question_set.all() \
.order_by('?')
else:
question_set = quiz.question_set.all()