为了账号安全,请及时绑定邮箱和手机立即绑定

django 外键属性名称和数据库内名称不同

django 外键属性名称和数据库内名称不同

倚天杖 2019-02-19 21:00:36
django ORM模型如下 class DeviceType(models.Model): name = models.CharField(_(u'设备类型名称'), max_length=64) class Device(models.Model) d_type = models.ForeignKey(DeviceType, db_column=u'device_type_id') # mo'ren的命名方式 # device_type = models.ForeignKey(DeviceType, db_column=u'device_type_id') 平常外键的命名方式就是为Djano默认的字段名后加id。使用db_column指定之后,不能通过Device实例o.device_type_id访问,而是o.d_type_id。django ORM外键字段的命名和db_column无关么?
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

无关。
这个字段有两个名字,一个是 d_type_id,它是 python 层面的;另一个是 device_type_id,它是最终存在数据库中的列名。而你通过实例 Device 访问,是在 python 层面的,如果访问 device_type_id 是会报错的:

>>> d.device_type_id
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'Device' object has no attribute 'device_type_id'

你在 python shell 中查看 dir(Device) 或者 dir(d) 都是找不到 device_type_id 的,只有 'd_type', 'd_type_id',:

>>> d.d_type  # 一个 DeviceType 实例
<DeviceType: first type>
>>> d.d_type_id  # device_type_id 列内存储值
1
查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 1031 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信