鍍金池/ 問答/Python/ django 外鍵屬性名稱和數(shù)據(jù)庫內(nèi)名稱不同

django 外鍵屬性名稱和數(shù)據(jù)庫內(nèi)名稱不同

django ORM模型如下

class DeviceType(models.Model):
    name = models.CharField(_(u'設(shè)備類型名稱'), 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無關(guān)么?

回答
編輯回答
背叛者

無關(guān)。
這個字段有兩個名字,一個是 d_type_id,它是 python 層面的;另一個是 device_type_id,它是最終存在數(shù)據(jù)庫中的列名。而你通過實例 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 列內(nèi)存儲值
1
2017年8月6日 03:09