名称错误:Django 1.10中未定义名称“anon_session_score”

2024-05-17 11:14:53 发布

您现在位置:Python中文网/ 问答频道 /正文

请帮忙。 这是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

^{pr2}$

回溯:

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


Tags: djangoanswernameinpyselfidfalse
1条回答
网友
1楼 · 发布于 2024-05-17 11:14:53

anon_session_score是一个类方法(即它是属于视图的方法),因此必须用self.anon_session_score来访问它。在

同样,出于同样的原因,它应该像视图中的所有其他方法一样,将self作为第一个参数。在

def anon_session_score(self, session, to_add=0, possible=0):

相关问题 更多 >