class MyModel(models.Model):
id = models.IntegerField(primary_key=True)
或
class MyModel(models.Model):
id_ = models.IntegerField(primary_key=True)
根据pep8,应使用single_trailing_underscore_以避免与Python关键字冲突,但是名为id_的列看起来很丑陋并且可能会导致对数据库级别不熟悉python的人造成混淆。
Django docs使用'id'列名: https://docs.djangoproject.com/en/1.11/ref/models/fields/#uuidfield
将此字段命名为“id”是否安全?
答案 0 :(得分:6)
Python允许在任何上下文中隐藏内置函数。 Builtins在LEGB模型中处于最低优先级(局部变量,封闭范围,全局变量,内置变量)。同时,其他模块中的代码不会受到此阴影的影响; id
仍然会在其他环境中引用内置函数。所以影子内置者是完全安全的。 “真正的”问题是它是否是一个好主意。在这种情况下:
id()
是不太常用的内置组件之一。.id
字段是惯用的,事实上,如果不这样做,Django会默认创建此字段。答案 1 :(得分:5)
是的,如果要为Django模型添加自定义主键,则可以使用id
,就像您在文档中链接的示例一样。但是,对于常规使用,Django会自动创建一个定义为
id
字段
id = models.AutoField(primary_key=True)