2014-05-18 137 views
2

解决对象我试图穿越在一个通用的way-如何从Django的ForeignKey的领域

Django的对象,我不能得到相关对象:

# field_names has the names of some fields of object 

for field_name in field_names: 
    field = object._meta.get_field_by_name(field_name) 

    if isinstance(field[0], ForeignKey): 
     related = getattr(object, field[0].get_attname()) 

相关然后持有主键值。

但我如何访问该对象?我错过了什么?

回答

1

实测值的溶液:

field = object._meta.get_field_by_name(field_name) 
if isinstance(field[0], ForeignKey): 
    fkey = {} 
    fkey['name'] = field[0].rel.get_related_field().name 
    fkey['value'] = getattr(object, field[0].get_attname()) 

    related = field[0].rel.to._default_manager.get(**{fkey['name']: fkey['value']}) 
2

你可以从rel底层对象相关:

field[0].rel.to 

可以通过使用get_field()简化代码位:

for field_name in field_names: 
    field = object._meta.get_field(field_name) 

    if isinstance(field, ForeignKey): 
     related = field.rel.to 
+1

然后相关的是模型类,而不是相关对象 –