2015-05-02 21 views
0

我內省了模型中某些字段的類型,特別是我有興趣檢索RDBMS相關類型,即"VARCHAR(20)",而不是Django字段類(在這種情況下爲django.db.models.CharField)。如何檢索由Django的ORM映射的相關字段的主鍵的SQL類型

但是,由於數據庫將兩個表與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兼容。

回答

1

嘗試此相關領域:

ft = field.related_model._meta.pk.db_type(connection=connection) 

model.pk確實是讓你的PK模型實例的值的屬性。 model._meta.pk是實際的Field實例,該實例是該模型的主鍵。

+0

謝謝@knbk,我非常感謝您的幫助和您提供的解釋! – furins