class dbview(models.Model):
    # field definitions omitted for brevity
    class Meta:
        db_table = 'read_only_view'

def main(request):
    result = dbview.objects.all()

抓住了一个例外,同时渲染:(1054,"未知的列'read_only_view.id'在'领域列表中的'")

那里是 没有主要关键 我可以看到在看法。是否有一个解决方法?

评论:
我有没有控制的查看,我访问与Django。MySQL浏览器显示列有但没有主要关键。

有帮助吗?

解决方案

当你说,'我有没有控制的查看,我访问与Django。MySQL浏览器显示列有但没有主要关键。'

我假设你的意思是,这是一个遗留表,你是不是允许增加或改变的列?

如果是这样,是不是真的有的一个主要关键(甚至一串或非int列*),然后该表没有设置了很好的性能可能很臭。

不要紧,你虽然。所有你需要的是一个列保证是唯一的每一个行。设置这是'primary_key=True在你的模型和Django会很高兴。

  • 还有另一种可能性,将problemmatic.如果没有列保证是唯一的后的表可能使用组合主键。那就是-它是指定两列采取的在一起,将提供一个独特的主要关键。这是完全有效的关系模型,但不幸的是,不支持通过Django。在这种情况下你不能做一原SQL除非你可以得到另一栏加入。

其他提示

我一直都有这个问题。我有一个观点,我不能或不想改变,但我想有一个页面来显示复合信息(可能在管理部分)。我只是覆盖了保存并引发了NotImplementedError:

    def save(self, **kwargs):
        raise NotImplementedError()

(虽然在大多数情况下可能不需要,但它让我感觉好一点)

我还在Meta类中设置为False。

    class Meta:
       managed = False

然后我只选择任何字段并将其标记为主键。如果它真的是独一无二的,你只需要在页面上显示信息等过滤器就无所谓了。

似乎对我来说很好。如果我忽视这项技术有任何问题,请提出意见。

如果视图中确实存在无主键,则没有解决方法。

Django要求每个模型只有一个字段 primary_key =真

应该有一个自动生成的 id 现场时你跑了 syncdb (如果没有主要关键定义中的模型,然后Django会插入一个 AutoField 为您)。

这个错误意味着Django是问你的数据库 id 领域,但没有存在。你可以运行 django manage.py dbshell 然后 DESCRIBE read_only_view; 和后的结果?这将显示所有列入数据库中。

或者,可以包含模型的定义排除在外?(并且确认你有没有改变模型的定义,因为你跑了 syncdb?)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top