django Models.py的问题

时间:2012-08-23 06:27:25

标签: python mysql django

  

我在使用 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

当我运行此命令 python manage.py shell 时发生以下错误

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

5 个答案:

答案 0 :(得分: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个空格。您遇到的问题是,您应将Poll.question之类的属性定义为与方法__unicode__相同的级别。

答案 1 :(得分: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也一样。

答案 2 :(得分:0)

看起来您可能在标签上混合了空格,请尝试运行:

python -m tabnanny models.py

并修复标签/空格缩进错误。根据{{​​3}} 总是使用空格而不是标签,这是一个好主意。

答案 3 :(得分: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)

答案 4 :(得分:0)

def __unicode__(self): 缩进question =pub_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