从模型对象中,我可以获得相关的对象快捷方式, 使用外键字段的名称:
>>> 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的答案。
答案 0 :(得分:1)
您可以使用getattr
m1 = Mailbox.objects.get(pk=38)
f1 = 'localdomainfk'
f1 = getattr(m1, f1)