Answers:
没关系 pk
从实际的主键字段更加独立,即你不需要关心的主键字段是否被称为id
或object_id
或什么的。
如果您的模型具有不同的主键字段,则还可以提供更高的一致性。
id
也是Python中的内置函数,因此我更喜欢使用pk。
在我知道pk
总是返回的Django项目中,id
我更喜欢id
在不与id()
函数冲突的地方使用(变量名以外的所有地方)。这样做的原因是,pk
该属性比id
查找中的pk
属性名称要花一些时间,因此它要慢7倍meta
。
%timeit obj.id
46 ns ± 0.187 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%timeit obj.pk
347 ns ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
以下是相关的Django代码:
def _get_pk_val(self, meta=None):
meta = meta or self._meta
return getattr(self, meta.pk.attname)
def _set_pk_val(self, value):
return setattr(self, self._meta.pk.attname, value)
pk = property(_get_pk_val, _set_pk_val)
当我需要使用名为的变量时,这确实很少见pk
。我更喜欢使用更详细的内容,例如user_id
代替pk
。
在整个项目中最好遵循相同的约定。就你而言id
它是参数名称,而不是属性,因此在时间上几乎没有区别。参数名称不会与内置id()
函数的名称冲突,因此可以id
在此处安全使用。
总结起来,您可以选择使用字段名称id
还是使用pk
快捷方式。如果您不是为Django开发库,而是为所有模型使用自动主键字段,则可以在id
任何地方使用,这有时会更快。另一方面,如果要通用访问(可能是自定义的)主键字段,请pk
在各处使用。三分之一微秒的时间对于网络而言毫无意义。
id
和为pk