当你说'我无法控制我使用Django访问的视图时.MySQL浏览器显示那里的列但没有主键.
我假设你的意思是这是一个遗留表,你不能添加或更改列?
如果是这样,并且确实没有主键(即使是字符串或非int列*),那么该表还没有很好地设置,并且性能可能很糟糕.
不过对你来说并不重要.您所需要的只是一列保证每行都是唯一的.在模型中将其设置为'primary_key = True,Django会很高兴.
还有一种可能存在问题的可能性.如果没有保证唯一的列,则表可能正在使用复合主键.也就是说 - 它指定两列一起提供唯一的主键.这是完全有效的关系建模,但Django不幸地支持它.在这种情况下,除了原始SQL之外你不能做很多事情,除非你可以添加另一个列.
这并没有真正解决与db视图有关的问题,而不是表.您已将其中一个字段指定为django的pk,无论是否.你可以逃避这一点,因为永远不会通过ORM对关系进行任何插入/更新.有关此技术的更多信息,请参阅[David S的答案](http://stackoverflow.com/a/11594959/519015)及其对此的评论. (9认同)
David S.. 14
我一直都有这个问题.我有一个观点,我不能或不想改变,但我希望有一个页面来显示复合信息(可能在管理部分).我只是覆盖了保存并引发了NotImplementedError:
def save(self, **kwargs): raise NotImplementedError()
(虽然在大多数情况下可能不需要这样,但它让我觉得好一点)
我还在Meta类中设置为False.
class Meta: managed = False
然后我只选择任何字段并将其标记为主键.如果它真的是独一无二的,你只是在网页上显示信息的过滤器等等并不重要.
似乎对我来说很好.如果这项技术有任何问题我请忽略,请提出意见.
当你说'我无法控制我使用Django访问的视图时.MySQL浏览器显示那里的列但没有主键.
我假设你的意思是这是一个遗留表,你不能添加或更改列?
如果是这样,并且确实没有主键(即使是字符串或非int列*),那么该表还没有很好地设置,并且性能可能很糟糕.
不过对你来说并不重要.您所需要的只是一列保证每行都是唯一的.在模型中将其设置为'primary_key = True,Django会很高兴.
还有一种可能存在问题的可能性.如果没有保证唯一的列,则表可能正在使用复合主键.也就是说 - 它指定两列一起提供唯一的主键.这是完全有效的关系建模,但Django不幸地支持它.在这种情况下,除了原始SQL之外你不能做很多事情,除非你可以添加另一个列.
我一直都有这个问题.我有一个观点,我不能或不想改变,但我希望有一个页面来显示复合信息(可能在管理部分).我只是覆盖了保存并引发了NotImplementedError:
def save(self, **kwargs): raise NotImplementedError()
(虽然在大多数情况下可能不需要这样,但它让我觉得好一点)
我还在Meta类中设置为False.
class Meta: managed = False
然后我只选择任何字段并将其标记为主键.如果它真的是独一无二的,你只是在网页上显示信息的过滤器等等并不重要.
似乎对我来说很好.如果这项技术有任何问题我请忽略,请提出意见.