Django: Querying read-only view with no primary key
1 2 3 4 5 6 7 | 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将会很高兴。
- 还有另一种可能会出现问题的可能性。如果没有保证唯一的列,则表可能正在使用复合主键。即-指定两列在一起将提供唯一的主键。这是完全有效的关系建模,但不幸的是,Django不支持这种关系建模。在这种情况下,除非您可以添加另一列,否则除了原始SQL之外您将无能为力。
我一直都有这个问题。我的观点是我无法更改或不想更改,但我想要一个页面来显示复合信息(也许在管理部分中)。我只是覆盖保存并引发NotImplementedError:
1 2 | def save(self, **kwargs): raise NotImplementedError() |
(尽管在大多数情况下可能不需要这样做,但这使我感觉好些了)
我还在Meta类中将Managed设置为False。
1 2 | class Meta: managed = False |
然后,我只选择任何字段并将其标记为主键。这是否真的与您无关紧要,只不过是在页面上显示信息等过滤器而已。
似乎对我来说很好。如果我忽略了此技术的任何问题,请表示赞赏。
如果视图中确实没有主键,则没有解决方法。
Django要求每个模型都只有一个字段
运行
此错误表示Django正在向您的数据库询问
或者,您可以包括排除的模型定义吗? (并确认自运行