Stoję do problemów z model.py plik

Kodeks model.py to:

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

Kiedy uruchamiam to polecenie Python Manage.py Shell następujący błąd występuje

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

Ten błąd występuje po dodaniu kilku linii kodu w moim modelu.py plik

Importuj datetime z Django.utils Import streetzone

w klasie ankiety

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

w klasie wyboru

def __unicode__(self):
        return self.choice
0
user786 23 sierpień 2012, 10:27

5 odpowiedzi

Najlepsza odpowiedź

Python jest bardzo wrażliwy na wcięcie. Twój konkretny kod powinien wyglądać tak:

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

Pamiętaj, że sugerowane wcięcie to 4 spacje dla każdego poziomu. Problem, który posiadasz, jest to, że twoje atrybuty, takie jak mówić Poll.question należy zdefiniować na tym samym poziomie, co metoda __unicode__.

2
ravenac95 23 sierpień 2012, 06:30

Wygląda na to, że Twój kod ma błędy z wcięciem. Spróbuj tego:

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

  def __unicode__(self):
      return self.choice

To samo dla klasy Pool.

0
Alexey Kachayev 23 sierpień 2012, 06:30

Wygląda na to, że może mieć mieszane spacje z zakładkami, spróbuj uruchomić:

python -m tabnanny models.py

I napraw błędy wcięcia kart / przestępców. Dobrym pomysłem jest zawsze Używaj przestrzeni zamiast tabulatorów, na pep8.

0
K Z 23 sierpień 2012, 06:31

Zamiast tego użyj poniższego pliku. Masz problemy z wcięciem. Pamiętaj, że cały kod na tym samym poziomie powinien być odpowiednio wyrównany.

Powinieneś również upewnić się, że nie mieszasz spacji i zakładek w edytorze. Ogólnie lepiej trzymać się przestrzeni. Kluczem jest, aby upewnić się, że nie mieszasz się i nie pasuje - w przeciwnym razie pojawi się podobne błędy.

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)
0
Burhan Khalid 23 sierpień 2012, 06:34

Twój def __unicode__(self): jest wcięty mniej niż linie question = i pub_date =. def powinien mieć takie samo wcięcia, co reszta kodu powyżej go w klasie, jeśli jest częścią klasy.

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
0
aneroid 23 sierpień 2012, 06:34