如何修复此python错误;全球名称';创建问题';“未定义”;

如何修复此python错误;全球名称';创建问题';“未定义”;,python,django,Python,Django,我正在学习Django测试教程。Pycharm正在test.py中的代码中抛出错误 create_question 在 QuestionViewTests(TestCase) 及 内部 QuestionMethodTests(TestCase) 课堂工作。我已经打字、复印和粘贴了,但仍然不起作用。我还尝试了文件>使缓存无效。。。但这也没用。我也对课程感到困惑 QuestionViewTests(TestCase) 及 他们是否在上面列出的第一类中 QuestionMethodTes

我正在学习Django测试教程。Pycharm正在test.py中的代码中抛出错误

create_question 

QuestionViewTests(TestCase) 

内部

QuestionMethodTests(TestCase)
课堂工作。我已经打字、复印和粘贴了,但仍然不起作用。我还尝试了文件>使缓存无效。。。但这也没用。我也对课程感到困惑

 QuestionViewTests(TestCase)

他们是否在上面列出的第一类中

QuestionMethodTests(TestCase) 
因为我看不出它在网站上的样子。我把他们两个都搬了进来,也搬了出去,但两种方式都不起作用。欢迎提出任何建议

我的代码

    import datetime

    from django.utils import timezone
    from django.test import TestCase
    from django.core.urlresolvers import reverse
    from .models import Question


    class QuestionMethodTests(TestCase):

        def test_was_published_recently_with_future_question(self):
            """
            was_published_recently() should return False for questions whose
            pub_date is in the future.
            """
            time = timezone.now() + datetime.timedelta(days=30)
            future_question = Question(pub_date=time)
            self.assertEqual(future_question.was_published_recently(), False)

        def test_was_published_recently_with_old_question(self):
            """
            was_published_recently() should return False for questions whose
            pub_date is older than 1 day.
            """
            time = timezone.now() - datetime.timedelta(days=30)
            old_question = Question(pub_date=time)
            self.assertEqual(old_question.was_published_recently(), False)

        def test_was_published_recently_with_recent_question(self):
            """
            was_published_recently() should return True for questions whose
            pub_date is within the last day.
            """
            time = timezone.now() - datetime.timedelta(hours=1)
            recent_question = Question(pub_date=time)
            self.assertEqual(recent_question.was_published_recently(), True)

        def create_question(question_text, days):
            """
            Creates a question with the given `question_text` and published the
            given number of `days` offset to now (negative for questions published
            in the past, positive for questions that have yet to be published).
            """
            time = timezone.now() + datetime.timedelta(days=days)
            return Question.objects.create(question_text=question_text, pub_date=time)


    class QuestionViewTests(TestCase):
        def test_index_view_with_no_questions(self):
            """
            If no questions exist, an appropriate message should be displayed.
            """
            response = self.client.get(reverse('polls:index'))
            self.assertEqual(response.status_code, 200)
            self.assertContains(response, "No polls are available.")
            self.assertQuerysetEqual(response.context['latest_question_list'], [])

        def test_index_view_with_a_past_question(self):
            """
            Questions with a pub_date in the past should be displayed on the
            index page.
            """
            create_question(question_text="Past question.", days=-30)
            response = self.client.get(reverse('polls:index'))
            self.assertQuerysetEqual(
                response.context['latest_question_list'],
                ['<Question: Past question.>']
            )

        def test_index_view_with_a_future_question(self):
            """
            Questions with a pub_date in the future should not be displayed on
            the index page.
            """
            create_question(question_text="Future question.", days=30)
            response = self.client.get(reverse('polls:index'))
            self.assertContains(response, "No polls are available.", status_code=200)
            self.assertQuerysetEqual(response.context['latest_question_list'], [])

        def test_index_view_with_future_question_and_past_question(self):
            """
            Even if both past and future questions exist, only past questions
            should be displayed.
            """
            create_question(question_text="Past question.", days=-30)
            create_question(question_text="Future question.", days=30)
            response = self.client.get(reverse('polls:index'))
            self.assertQuerysetEqual(
                response.context['latest_question_list'],
                ['<Question: Past question.>']
            )

        def test_index_view_with_two_past_questions(self):
            """
            The questions index page may display multiple questions.
            """
            create_question(question_text="Past question 1.", days=-30)
            create_question(question_text="Past question 2.", days=-5)
            response = self.client.get(reverse('polls:index'))
            self.assertQuerysetEqual(
                response.context['latest_question_list'],
                ['<Question: Past question 2.>', '<Question: Past question 1.>']
            )

    class QuestionIndexDetailTests(TestCase):
        def test_detail_view_with_a_future_question(self):
            """
            The detail view of a question with a pub_date in the future should
            return a 404 not found.
            """
            future_question = create_question(question_text='Future question.',
                                              days=5)
            response = self.client.get(reverse('polls:detail',
                                       args=(future_question.id,)))
            self.assertEqual(response.status_code, 404)

        def test_detail_view_with_a_past_question(self):
            """
            The detail view of a question with a pub_date in the past should
            display the question's text.
            """
            past_question = create_question(question_text='Past Question.',
                                            days=-5)
            response = self.client.get(reverse('polls:detail',
                                       args=(past_question.id,)))
            self.assertContains(response, past_question.question_text,
                                status_code=200)
导入日期时间
从django.utils导入时区
从django.test导入TestCase
从django.core.urlResolver反向导入
模型导入问题
类QuestionMethodTests(测试用例):
def测试最近发布,带有未来问题(自我):
"""
was_published_recently()对于以下问题应返回False
酒吧的日期是在未来。
"""
time=timezone.now()+datetime.timedelta(天=30)
未来问题=问题(发布日期=时间)
self.assertEqual(future\u question.was\u published\u recently(),False)
def测试最近发布,带有旧问题(自我):
"""
was_published_recently()对于以下问题应返回False
发布日期早于1天。
"""
time=timezone.now()-datetime.timedelta(天=30)
旧问题=问题(发布日期=时间)
self.assertEqual(旧问题.最近发布了吗(),False)
def测试是最近发布的,带有最近的问题(自我):
"""
was_published_recently()对于以下问题应返回True
发布日期在最后一天之内。
"""
time=timezone.now()-datetime.timedelta(小时=1)
最近的问题=问题(发布日期=时间)
self.assertEqual(最近发布的问题,最近发布了吗(),True)
def创建问题(问题文本,天数):
"""
使用给定的“问题”文本创建问题并发布
给定到现在的“天数”偏移量(对于已发布的问题为负值
过去,对于尚未公布的问题,这是积极的)。
"""
time=timezone.now()+datetime.timedelta(天=天)
返回Question.objects.create(Question\u text=Question\u text,pub\u date=time)
类问题视图测试(TestCase):
def测试索引视图,无问题(自我):
"""
如果不存在任何问题,则应显示相应的消息。
"""
response=self.client.get(反向('polls:index'))
self.assertEqual(response.status_代码,200)
self.assertContains(响应,“没有可用的轮询”)
self.assertquerystequal(response.context['latest\u question\u list'],[])
def test_index_view_与过去问题(自我):
"""
发布日期在过去的问题应显示在
索引页。
"""
创建问题(问题文本=“过去的问题”,天数=-30)
response=self.client.get(反向('polls:index'))
self.assertquerystequal(
响应.上下文[“最新问题列表”],
['']
)
def test_index_view_与未来问题(自我):
"""
带有未来发布日期的问题不应显示在屏幕上
索引页。
"""
创建问题(问题文本=“未来问题”,天数=30)
response=self.client.get(反向('polls:index'))
self.assertContains(响应,“没有可用的轮询”,状态代码=200)
self.assertquerystequal(response.context['latest\u question\u list'],[])
def test_index_view_与未来问题和过去问题(自我):
"""
即使过去和未来的问题都存在,也只有过去的问题
应该显示。
"""
创建问题(问题文本=“过去的问题”,天数=-30)
创建问题(问题文本=“未来问题”,天数=30)
response=self.client.get(反向('polls:index'))
self.assertquerystequal(
响应.上下文[“最新问题列表”],
['']
)
def test_index_view_与两个过去的问题(自我):
"""
“问题索引”页面可能会显示多个问题。
"""
创建问题(问题文本=“过去的问题1.”,天数=-30)
创建问题(问题文本=“过去的问题2.”,天数=-5)
response=self.client.get(反向('polls:index'))
self.assertquerystequal(
响应.上下文[“最新问题列表”],
['', '']
)
类问题详细测试(测试用例):
def测试\详细信息\查看\未来\问题(自我):
"""
未来发布日期问题的详细视图应为
返回未找到的404。
"""
未来问题=创建问题(问题文本=“未来问题”,
天数=5天)
response=self.client.get(反向('polls:detail'),
args=(future_question.id,))
self.assertEqual(response.status_代码,404)
def test_detail_view_与过去问题(自我):
"""
发布日期在过去的问题的详细视图应
显示问题的文本。
"""
过去的问题=创建问题(问题文本=过去的问题
QuestionMethodTests(TestCase) 
    import datetime

    from django.utils import timezone
    from django.test import TestCase
    from django.core.urlresolvers import reverse
    from .models import Question


    class QuestionMethodTests(TestCase):

        def test_was_published_recently_with_future_question(self):
            """
            was_published_recently() should return False for questions whose
            pub_date is in the future.
            """
            time = timezone.now() + datetime.timedelta(days=30)
            future_question = Question(pub_date=time)
            self.assertEqual(future_question.was_published_recently(), False)

        def test_was_published_recently_with_old_question(self):
            """
            was_published_recently() should return False for questions whose
            pub_date is older than 1 day.
            """
            time = timezone.now() - datetime.timedelta(days=30)
            old_question = Question(pub_date=time)
            self.assertEqual(old_question.was_published_recently(), False)

        def test_was_published_recently_with_recent_question(self):
            """
            was_published_recently() should return True for questions whose
            pub_date is within the last day.
            """
            time = timezone.now() - datetime.timedelta(hours=1)
            recent_question = Question(pub_date=time)
            self.assertEqual(recent_question.was_published_recently(), True)

        def create_question(question_text, days):
            """
            Creates a question with the given `question_text` and published the
            given number of `days` offset to now (negative for questions published
            in the past, positive for questions that have yet to be published).
            """
            time = timezone.now() + datetime.timedelta(days=days)
            return Question.objects.create(question_text=question_text, pub_date=time)


    class QuestionViewTests(TestCase):
        def test_index_view_with_no_questions(self):
            """
            If no questions exist, an appropriate message should be displayed.
            """
            response = self.client.get(reverse('polls:index'))
            self.assertEqual(response.status_code, 200)
            self.assertContains(response, "No polls are available.")
            self.assertQuerysetEqual(response.context['latest_question_list'], [])

        def test_index_view_with_a_past_question(self):
            """
            Questions with a pub_date in the past should be displayed on the
            index page.
            """
            create_question(question_text="Past question.", days=-30)
            response = self.client.get(reverse('polls:index'))
            self.assertQuerysetEqual(
                response.context['latest_question_list'],
                ['<Question: Past question.>']
            )

        def test_index_view_with_a_future_question(self):
            """
            Questions with a pub_date in the future should not be displayed on
            the index page.
            """
            create_question(question_text="Future question.", days=30)
            response = self.client.get(reverse('polls:index'))
            self.assertContains(response, "No polls are available.", status_code=200)
            self.assertQuerysetEqual(response.context['latest_question_list'], [])

        def test_index_view_with_future_question_and_past_question(self):
            """
            Even if both past and future questions exist, only past questions
            should be displayed.
            """
            create_question(question_text="Past question.", days=-30)
            create_question(question_text="Future question.", days=30)
            response = self.client.get(reverse('polls:index'))
            self.assertQuerysetEqual(
                response.context['latest_question_list'],
                ['<Question: Past question.>']
            )

        def test_index_view_with_two_past_questions(self):
            """
            The questions index page may display multiple questions.
            """
            create_question(question_text="Past question 1.", days=-30)
            create_question(question_text="Past question 2.", days=-5)
            response = self.client.get(reverse('polls:index'))
            self.assertQuerysetEqual(
                response.context['latest_question_list'],
                ['<Question: Past question 2.>', '<Question: Past question 1.>']
            )

    class QuestionIndexDetailTests(TestCase):
        def test_detail_view_with_a_future_question(self):
            """
            The detail view of a question with a pub_date in the future should
            return a 404 not found.
            """
            future_question = create_question(question_text='Future question.',
                                              days=5)
            response = self.client.get(reverse('polls:detail',
                                       args=(future_question.id,)))
            self.assertEqual(response.status_code, 404)

        def test_detail_view_with_a_past_question(self):
            """
            The detail view of a question with a pub_date in the past should
            display the question's text.
            """
            past_question = create_question(question_text='Past Question.',
                                            days=-5)
            response = self.client.get(reverse('polls:detail',
                                       args=(past_question.id,)))
            self.assertContains(response, past_question.question_text,
                                status_code=200)
class Foo:
    ...

    def create_question(x):
       ...

create_question(3)
class Foo:
    ...

def create_question(x):
    ...

create_question(3)