请帮忙。
这是model.py
from django.db import models
import re
from model_utils.managers import InheritanceManager
# Create your models here.
class Subject(models.Model):
subject=models.CharField(max_length=250,unique=True, blank=False)
class Meta:
verbose_name="Предмет"
verbose_name_plural = "Предметы"
def __str__(self):
return self.subject
class Quiz(models.Model):
name=models.CharField(max_length=120,blank=False)
url=models.SlugField(max_length=120,blank=False)
subject=models.ForeignKey(Subject)
random_order = models.BooleanField(blank=False,default=False)
answers_at_end = models.BooleanField(blank=False,default=False)
def save(self,force_insert=False, force_update=False, *args,**kwargs):
self.url = re.sub(r'\s+','-',self.url).lower()
self.url=''.join(letter for letter in self.url if letter.isalnum() or letter=='-')
super(Quiz,self).save(force_insert,force_update,*args,**kwargs)
class Meta:
verbose_name="Тест"
verbose_name_plural="Тесты"
def __str__(self):
return self.name
def get_questions(self):
return self.question_set.all().select_subclasses()
def anon_score_id(self):
return str(self.id)+"_score"
def anon_q_list(self):
return str(self.id)+"_q_list"
def anon_q_data(self):
return str(self.id)+"_data"
class Question(models.Model):
quiz = models.ManyToManyField(Quiz,verbose_name=u"Тест",blank=True)
figure = models.ImageField(upload_to='uploads/%Y/%m/%d',blank=True,null=True)
content=models.CharField(max_length=1000,blank=False)
random_order=models.BooleanField(blank=False,default=False)
objects=InheritanceManager()
class Meta:
verbose_name="Вопрос"
verbose_name_plural="Вопросы"
def __str__(self):
return self.content
def get_score(self,guess):#сюда надо положить все выбранные варианты пользоватля
all_answers=Answer.objects.filter(question=self)
rights=0
for q_answer in all_answers:
if q_answer.correct is True:
rights+=1
corrects=0
incorrects=0
for guess_id in guess:
answer = Answer.objects.get(id=guess_id)
if answer.correct is True:
corrects+=1
else:
incorrects+=1
if (rights==corrects)and(incorrects==0):
return 2
elif (rights%corrects==1)and(incorrects==1):
return 1
elif (rights%corrects>1)and(incorrects>1):
return 0
def random_answers(self,queryset):
if self.random_order is True:
return queryset.order_by('?')
else:
return queryset.order_by()
def get_answers(self):
return self.random_answers(Answer.objects.filter(question=self))
def get_answers_list(self):
return [(answer.id,answer.answer)for answer in
self.random_answers(Answer.objects.filter(question=self))]
def answer_choice_to_string(self, guess):
return Answer.objects.get(id=guess).answer
class Answer(models.Model):
question=models.ForeignKey(Question, verbose_name="Вопрос")
answer=models.CharField(max_length=1000,blank=False)
correct=models.BooleanField(blank=False,default=False)
def __str__(self):
return self.answer
class Meta:
verbose_name="Ответ"
verbose_name_plural="Ответы"
这是views.py
回溯:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/matem13/take/
Django Version: 1.10.3
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'voud_quiz']
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.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "D:\virt_voud\lib\site-packages\django\core\handlers\exception.py" in inner
39. response = get_response(request)
File "D:\virt_voud\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "D:\virt_voud\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\virt_voud\lib\site-packages\django\views\generic\base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "D:\virt_voud\src\voud_quiz\views.py" in dispatch
35. return super(QuizTake,self).dispatch(request,*args, **kwargs)
File "D:\virt_voud\lib\site-packages\django\views\generic\base.py" in dispatch
88. return handler(request, *args, **kwargs)
File "D:\virt_voud\lib\site-packages\django\views\generic\edit.py" in post
183. return self.form_valid(form)
File "D:\virt_voud\src\voud_quiz\views.py" in form_valid
49. self.form_valid_anon(form)
File "D:\virt_voud\src\voud_quiz\views.py" in form_valid_anon
104. anon_session_score(self.request.session, score_to,2)
Exception Type: NameError at /matem13/take/
Exception Value: name 'anon_session_score' is not defined
我不明白为什么视图看不到函数anon_session_score
anon_session_score
是一个类方法(即它是属于视图的方法),因此必须用self.anon_session_score
来访问它。在同样,出于同样的原因,它应该像视图中的所有其他方法一样,将
self
作为第一个参数。在相关问题 更多 >
编程相关推荐