0

model.pyファイルでいくつかの問題に直面しています

model.pyのコードは次のとおりです。

from django.db import models

import datetime
from django.utils import timezone

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
 def __unicode__(self):
        return self.question
 def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()
 def __unicode__(self):
        return self.choice

このコマンドを実行すると、 pythonmanage.pyshell次のエラーが発生します

File "/home/ghrix/testing/demo/polls/models.py", line 9
    def __unicode__(self):
                         ^
IndentationError: unindent does not match any outer indentation level

このエラーは、model.pyファイルにコードを数行追加した後に発生します

django.utilsから日時をインポートするタイムゾーンをインポートする

世論調査のクラスで

def __unicode__(self):
        return self.question
 def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

チョイスクラス

def __unicode__(self):
        return self.choice
4

5 に答える 5

2

Python はインデントに非常に敏感です。特定のコードは次のようになります。

from django.db import models

import datetime
from django.utils import timezone

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __unicode__(self):
        return self.question

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()

    def __unicode__(self):
        return self.choice

推奨されるインデントは、各レベルで 4 つのスペースです。あなたが抱えている問題は、 say のような属性がPoll.questionmethod と同じレベルで定義されるべきであること__unicode__です。

于 2012-08-23T06:30:52.973 に答える
0

コードにインデントに関するエラーがあるようです。これを試してください:

class Choice(models.Model):
  poll = models.ForeignKey(Poll)
  choice = models.CharField(max_length=200)
  votes = models.IntegerField()

  def __unicode__(self):
      return self.choice

クラスについても同じですPool

于 2012-08-23T06:30:36.843 に答える
0

スペースとタブが混在しているようです。実行してみてください:

python -m tabnanny models.py

タブ/スペースのインデント エラーを修正します。PEP8 に従って、常にタブの代わりにスペースを使用することをお勧めします。

于 2012-08-23T06:31:19.667 に答える
0

代わりに以下のファイルを使用してください。インデントに問題があります。同じレベルのすべてのコードは適切に配置する必要があることに注意してください。

また、エディターでスペースとタブを混在させないようにする必要があります。一般に、スペースに固執する方が良いです。重要なのは、混同しないようにすることです。そうしないと、同様のエラーが発生します。

import datetime

from django.db import models
from django.utils import timezone

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __unicode__(self):
        return unicode(self.question)

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()

    def __unicode__(self):
        return unicode(self.choice)
于 2012-08-23T06:34:08.217 に答える
0

あなたのdef __unicode__(self):インデントquestion =andpub_date =行よりも小さくなっています。クラスのdef一部である場合は、クラス内でその上にある残りのコードと同じインデントが必要です。

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    # the def should start at this indent level like the lines above
    # <<<<<<<<
    def __unicode__(self):
        return self.question
于 2012-08-23T06:34:14.597 に答える