

**前提・実現したいこと**  
私はDjangoのチュートリアルに取り組んでいます。  
対話型シェルを呼び出し、データベースAPIにアクセスするためのコマンドを使用するために以下のサイトを参照していましたが、エラーが発生していまいました。解決策をお教え下さい。  
<https://docs.djangoproject.com/ja/4.0/intro/tutorial02/>

**発生している問題・エラーメッセージ**

[code]

    >>> from polls.models import Choice, Question
    >>> Question.objects.all()
    <QuerySet [<Question: What's up?>]>
    >>> Question.objects.filter(id=1)
    <QuerySet [<Question: What's up?>]>
    >>> Question.objects.filter(question_text__startswith='What')
    <QuerySet [<Question: What's up?>]>
    >>> from django.utils import timezone
    >>> current_year = timezone.now().year
    >>> Question.objects.get(pub_date__year=current_year)
    <Question: What's up?>
    >>>
    >>> Question.objects.get(id=2)
    Traceback (most recent call last):
      "<console>", line 1, in <module>
      "\anaconda3\envs\ev1\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
        return getattr(self.get_queryset(), name)(*args, **kwargs)
      "\anaconda3\envs\ev1\lib\site-packages\django\db\models\query.py", line 496, in get
        raise self.model.DoesNotExist(
    polls.models.Question.DoesNotExist: Question matching query does not exist.
    >>> Question.objects.get(pk=1)
    <Question: What's up?>
    >>> q = Question.objects.get(pk=1)
    >>> q.was_published_recently()
    True
    >>> q = Question.objects.get(pk=1)
    >>> q.choice_set.all()
    <QuerySet []>
    >>> q.choice_set.create(choice_text='Not much', votes=0)
    <Choice: Not much>
    >>> q.choice_set.create(choice_text='The sky', votes=0)
    <Choice: The sky>
    >>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)
    >>> c.question
    <Question: What's up?>
    >>> q.choice_set.all()
    <QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
    >>> q.choice_set.count()
    3
    >>> Choice.objects.filter(question__pub_date__year=current_year)
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    NameError: name 'current_year' is not defined
    
[/code]

**該当のソースコード**  
polls/models.py

[code]

    import datetime
    from django.utils import timezone
    from django.db import models
    
    class Question(models.Model):
        question_text = models.CharField(max_length=200)
        pub_date = models.DateTimeField('date published')
    
        def __str__(self):
            return self.question_text
    
        def was_published_recently(self):
            return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    
    class Choice(models.Model):
        question = models.ForeignKey(Question, on_delete=models.CASCADE)
        choice_text = models.CharField(max_length=200)
        votes = models.IntegerField(default=0)
    
        def __str__(self):
            return self.choice_text
    
[/code]


CC BY-SA 4.0
2022-05-11T03:50:49.817
88753
2022-05-11T11:54:47.427
2022-05-11T11:54:47.427
3060
52539
question
python django
Djangoの対話シェルAPIでエラーが起きてしまう(2)


**コメント対応**

失礼しました、質問当初のインデントの有無に反射的に回答してしまいました。  
結論としては、 **そのエラーはTutorial通りの正しい状況です**

Tutorial記事では以下の部分に相当します。

[code]

    >>> Question.objects.get(id=2)
    Traceback (most recent call last):
        ...
    DoesNotExist: Question matching query does not exist.
    
[/code]

私の環境では以下のように表示されました。

[code]

    >>> Question.objects.get(id=2)
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File "C:\Develop\Python\vDjango\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
        return getattr(self.get_queryset(), name)(*args, **kwargs)
      File "C:\Develop\Python\vDjango\lib\site-packages\django\db\models\query.py", line 496, in get
        raise self.model.DoesNotExist(
    polls.models.Question.DoesNotExist: Question matching query does not exist.
    
[/code]

**だから安心して次の作業を続けていってください。**

ちなみに更新した質問のソースコードも、まだ **return** の行のインデントが不足しています。  
直しておいた方が良いでしょう。

* * *

以下は当初の質問のソースコードへのちょっと的外れな回答です。

メソッド部分のインデント(字下げ)が不足しているからですね。  
以下のようにしてください。

[code]

    import datetime
    from django.utils import timezone
    from django.db import models
    
    class Question(models.Model):
        question_text = models.CharField(max_length=200)
        pub_date = models.DateTimeField('date published')
        def __str__(self):
            return self.question_text
    
        def was_published_recently(self):
            return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    
    class Choice(models.Model):
        question = models.ForeignKey(Question, on_delete=models.CASCADE)
        choice_text = models.CharField(max_length=200)
        votes = models.IntegerField(default=0)
    
        def __str__(self):
            return self.choice_text
    
[/code]

Djangoのチュートリアルに取り組んでいるということですが、その前にPythonの基本的な知識も必要でしょう。

Djangoチュートリアルと並行でも良いので、Pythonの基本的な知識に関するコース的な資料も探して勉強することをお勧めします。


CC BY-SA 4.0
2022-05-11T04:23:48.323
88754
2022-05-11T06:37:29.183
2022-05-11T06:37:29.183
26370
26370
88753
answer