在Django模型中将字段命名为“id”是否安全?

时间:2017-05-05 20:52:43

标签: python django

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”是否安全?

2 个答案:

答案 0 :(得分:6)

Python允许在任何上下文中隐藏内置函数。 Builtins在LEGB模型中处于最低优先级(局部变量,封闭范围,全局变量,内置变量)。同时,其他模块中的代码不会受到此阴影的影响; id仍然会在其他环境中引用内置函数。所以影子内置者是完全安全的。 “真正的”问题是它是否是一个好主意。在这种情况下:

  • id()是不太常用的内置组件之一。
  • 在一个类中隐藏内置函数比在函数内部或全局内容中隐藏内置函数更不容易引起混淆,因为类变量通常以类或实例的名称为前缀,后跟一个点。
  • 在Django代码中使用.id字段是惯用的,事实上,如果不这样做,Django会默认创建此字段。

答案 1 :(得分:5)

是的,如果要为Django模型添加自定义主键,则可以使用id,就像您在文档中链接的示例一样。但是,对于常规使用,Django会自动创建一个定义为

id字段
id = models.AutoField(primary_key=True)

Read more here