从django.db.models.fields.related.ForeignKey获取相关对象

时间:2016-04-04 10:14:18

标签: django

从模型对象中,我可以获得相关的对象快捷方式, 使用外键字段的名称:

>>> m1 = Mailbox.objects.get(pk=38)
>>> str(m1.localdomainfk)
'framailx.de'

但是如果我有外键字段而不是它的名字, 我只能得到相关对象的pk:

>>> f1 = Mailbox._meta.get_field('localdomainfk')
>>> f1.value_from_object(m1)
7

任何人都可以告诉我,如何获取相关对象 快捷方式,如果我只有本地对象和外键字段?

Background是一个通用的只读DetailView,其中显示的实际字段列表取决于活动用户(员工用户看到所有)。

这是模型mixin的一部分:

def get_fields(self, staff):
    l = self.readonly_fields_for_staff if staff else self.readonly_fields
    return [(field.verbose_name, self.get_field_value(field), 
                self.get_related_object_from_field(field))
                        for field in l]

def get_field_value(self, field):
    if field.is_relation:
        return None
    else:
        return self._get_FIELD_display(field)

def get_related_object_from_field(self, field):
    if field.is_relation:
        return getattr(self, field.name, None)
    else:
        return None

get_fields返回的列表由模板使用。

get_related_object_from_field包含Muhammad Tahir的答案。

1 个答案:

答案 0 :(得分:1)

您可以使用getattr

m1 = Mailbox.objects.get(pk=38)
f1 = 'localdomainfk'
f1 = getattr(m1, f1)