繁体   English   中英

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

[英]Is it safe to name field as 'id' in Django model?

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

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

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

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

 id = models.AutoField(primary_key=True) 

在这里阅读更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM