Django获取字段值的属性(外键)

时间:2018-06-08 04:35:04

标签: django django-models django-templates

我需要从模型对象(Jacket)中的每个字段获取外键(Option)的属性(代码)。

显然我的错误。它只返回字段值的Id。我需要字段值的属性'code'。

模板:

{% for field, value in jacket.get_fields %}

<tr>
  <td>
    {{field}}
  </td>
  <td>
    {{value}}
  </td>
</tr>
{% endfor %}

models.py

def get_fields(self):
    return [(field.name, field.value_to_string(self)) for field in Jacket._meta.fields]

1 个答案:

答案 0 :(得分:0)

您的方法正确,但您需要在实例上使用getattr

见这个例子:

>>> my_instance = MyModel.objects.first()
>>> field_names = [field.name for field in MyModel._meta.fields]
>>> print(field_names)
['id', 'title', 'created_by', 'created_on']
>>> for field_name in field_names:
...     print('{field}: {value}'.format(field=field_name, value=getattr(my_instance, field_name)))
...
id: 1
title: My instance
created_by: user
created_on: 2018-06-08 06:58:26.927950

通过使用getattr,您可以从属性名称中检索值,它只是一个Python函数,可以在任何对象中使用。

在您的情况下,您应该使用getattr上的self,因为您在模板上使用了Jacket实例。您可能遇到关系问题,假设您的ManyToManyField模型中有Jacketgetattr将返回RelatedManager个对象。但您可以使用get_fields方法处理该问题。