无法在django(python)中为模型/表类添加新函数

时间:2014-10-14 22:33:49

标签: python django django-models

以下是我目前遇到的问题:

  • 我使用命令提示符
  • 在Windows上运行the first django tutorial
  • 我创建了一个名为'问题'在models.py。
  • 我尝试在此类中创建__str__()函数,如下所示:

from django.db import models
class Question(models.Model):
   def __str__(self):
     return self.question_text`

这就是我的models.py看起来的样子:

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
class Choice(models.Model):
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

我收到的错误如下:

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Python34\lib\site-packages\django\db\models\base.py", line 117, in __new__
kwargs = {"app_label": package_components[app_label_index]}
IndexError: list index out of range

任何人都有任何想法?我是django的总菜鸟,而且我不能100%确定base.py应该在这里做什么。

可以在此处找到Base.py:https://github.com/django/django/blob/master/django/db/models/base.py

1 个答案:

答案 0 :(得分:1)

你快到了

你需要在models.py文件中的Question类中添加def __str__()方法,如。

你的models.py应如下所示:

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
class Choice(models.Model):
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    def __str__(self):
        return self.choice_text #or whatever u want here, i just guessed u wanted choice text

你实际在做的是覆盖你正在进行子类化的类中的内置dunder方法。 models.Model本身已经有__str__方法,您只是在Questionmodels.Model

中修改其行为

PS。如果你在python 2上,方法名称应该是__unicode__而不是__str__

PPS。一点OOP语言:如果一个&#34;功能&#34;是一个类的一部分,它被称为&#34;方法&#34;