【问题标题】:Django get attribute of field value (of foreign key)Django获取字段值的属性(外键)
【发布时间】:2018-11-18 02:08:11
【问题描述】:

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

显然我所拥有的是错误的。它只返回字段值的 ID。我需要字段值的属性“代码”。

模板:

{% 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]

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:

    您的方法正确,但您需要在您的实例上使用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 函数。

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

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 2021-08-31
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      相关资源
      最近更新 更多