如何获取Django ORM映射的相关字段主键的SQL类型
How to to retrieve the SQL type of the primary key of a related field mapped by Django's ORM
我正在反思模型中某些字段的类型,特别是我对检索 RDBMS 相关类型感兴趣,即 "VARCHAR(20)"
,而不是 Django 字段 class( django.db.models.CharField
在这种情况下)。
我在关系方面遇到了问题,但是,因为数据库将两个表与 varchar
主键混合在一起,而其他表与 integer
pks 混合(因此我无法做出任何假设)。
到目前为止,我已尝试使用以下代码检索字段类型:
# model is a django.db.model class
for field in model._meta.get_fields(include_parents=False):
try:
# this code works for anything but relations
ft = field.db_type(connection=connection)
except:
# I'm introspecting a relation -> I would like to retrieve the field type of the related object's pk
ft = field.related_model.pk.db_type(connection=connection)
在处理关系时失败并出现以下错误:
'property' object has no attribute 'db_type'
当它失败时,field.__class__
似乎是一个 ManyToOneRel
对象,如果这可能有任何帮助的话。还值得注意的是,代码必须与新的 Django 1.8 _meta
.
兼容
对相关字段试试这个:
ft = field.related_model._meta.pk.db_type(connection=connection)
model.pk
确实是一个 属性,可以让您获得模型实例的 pk 值。 model._meta.pk
是实际的 Field
实例,它是该模型的主键。
我正在反思模型中某些字段的类型,特别是我对检索 RDBMS 相关类型感兴趣,即 "VARCHAR(20)"
,而不是 Django 字段 class( django.db.models.CharField
在这种情况下)。
我在关系方面遇到了问题,但是,因为数据库将两个表与 varchar
主键混合在一起,而其他表与 integer
pks 混合(因此我无法做出任何假设)。
到目前为止,我已尝试使用以下代码检索字段类型:
# model is a django.db.model class
for field in model._meta.get_fields(include_parents=False):
try:
# this code works for anything but relations
ft = field.db_type(connection=connection)
except:
# I'm introspecting a relation -> I would like to retrieve the field type of the related object's pk
ft = field.related_model.pk.db_type(connection=connection)
在处理关系时失败并出现以下错误:
'property' object has no attribute 'db_type'
当它失败时,field.__class__
似乎是一个 ManyToOneRel
对象,如果这可能有任何帮助的话。还值得注意的是,代码必须与新的 Django 1.8 _meta
.
对相关字段试试这个:
ft = field.related_model._meta.pk.db_type(connection=connection)
model.pk
确实是一个 属性,可以让您获得模型实例的 pk 值。 model._meta.pk
是实际的 Field
实例,它是该模型的主键。