【问题标题】:why can't I reference my model's name in this view (Django)?为什么我不能在这个视图(Django)中引用我的模型名称?
【发布时间】:2014-02-04 17:33:16
【问题描述】:

我想对称为“时刻”的对象执行简单的操作:

class Moment(models.Model):
    name = models.CharField(max_length=200)
    parent = models.ForeignKey("Moment")

    def __unicode__(self):
        return self.name

当我在我的视图中引用时刻实例时:

def index(request):
    moments = Moment.objects.all()
    moment_names = [a.name for a in moments]

我收到以下错误:

OperationalError at /moments/

no such column: moments_app_moment.name

Request Method:     GET
Request URL:    http://127.0.0.1:8000/moments/
Django Version:     1.6.1
Exception Type:     OperationalError
Exception Value:    

no such column: moments_app_moment.name

为什么我不能调用 a.name?我在时刻模型中定义了“名称”。我确定我忽略了一些基本的东西。

【问题讨论】:

  • @tcarobruce 是的,我已经运行了 syncdb,并且当我运行 sql 时该列会显示。我被难住了。

标签: django models operationalerror


【解决方案1】:

这对我来说很好。

In [1]: from foo.models import Moment

In [2]: Moment.objects.create(name='the name')
Out[2]: <Moment: the name>

In [3]: Moment.objects.create(name='another name')
Out[3]: <Moment: another name>

In [4]: Moment.objects.create(name='child', parent=_)
Out[4]: <Moment: child>

In [5]: [m.name for m in Moment.objects.all()]
Out[5]: [u'the name', u'another name', u'child']

需要注意的一点是我必须更改的是您的parent 字段不为空(鸡或蛋)。你需要这个:

parent = models.ForeignKey('self', null=True)

然后,在本地删除您的数据库文件并再次syncdb

【讨论】:

    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多