I have been trying to run this code and it throws an indent error. No matter what I try, the result is the same.
If I delete the indent before def __str__(self):
and the rest of the code, it works fine, but on output, instead of displaying the question, it shows 'Question object'.
def __str__(self):
^
IndentationError: unexpected indent
Here is the code:
from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils import timezone
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
I guess you are mixing spaces and tabs ....
You can indent the code using autopep
please see https://pypi.python.org/pypi/autopep8
You are mixing spaces and tabs. Assuming the code in your post is using the same indent characters that you're using in reality, here is how your code actually indents, with >---
representing one tab, and .
representing one space.
from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils import timezone
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
As you can see, your indentation is not consistent. When defining both instances of __str__()
, your existing indent level is 4 spaces, but the function definition is indented with 1 tab. That results in the error.
By convention, Python code should only be indented using spaces, never tabs, for exactly this reason.
See also PEP 8, specifically the sections "Indentation" and "Tabs or Spaces?"