题
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
然后我只选择任何字段并将其标记为主键。如果它真的是独一无二的,你只需要在页面上显示信息等过滤器就无所谓了。
似乎对我来说很好。如果我忽视这项技术有任何问题,请提出意见。
如果视图中确实存在无主键,则没有解决方法。
应该有一个自动生成的 id
现场时你跑了 syncdb
(如果没有主要关键定义中的模型,然后Django会插入一个 AutoField
为您)。
这个错误意味着Django是问你的数据库 id
领域,但没有存在。你可以运行 django manage.py dbshell
然后 DESCRIBE read_only_view;
和后的结果?这将显示所有列入数据库中。
或者,可以包含模型的定义排除在外?(并且确认你有没有改变模型的定义,因为你跑了 syncdb
?)