在Django 1.6中基于字段名称迭代地提取模型实例的字段值和默认值

时间:2014-09-09 13:20:09

标签: django django-templates django-models

所以我想在我的模型类中创建一个方法(我在视图中使用DetailView),它返回一组预先批准的字段值和用户友好名称,我可以在模板中调用它们。此方法必须检查字段值是否不是模型中每个已批准字段的默认字段值,然后将包含字段值/名称对的列表返回到我的模板。

问题在于我无法找到提取field.value()field.default的方法,如下面的伪代码所示:

def displayFields(self):
    approvedFields = [  ('field1','Field One'),
                        ('field2','Field Two'),
                        ('field3','Field Three')
                        ]
    resultFieldPairs = []
    for fieldName in approvedFields:
        field = self._meta.get_field_by_name(fieldName[0])
        if field.value() != field.default:
            resultFieldPairs.append(tuple([fieldName[1], field.value()]))
    return resultFieldPairs

我可以从错误中看到我self._meta.get_field_by_name()返回 RelatedObject ,但Django文档似乎并不清楚这个对象&#39 ; s属性和方法。

请帮忙。

1 个答案:

答案 0 :(得分:0)

我不知道解决内部_meta属性有多好,通常不推荐,但是 - 你可以使用

self._meta.get_field_by_name(fieldName[0])[0].default

注意[0]因为get_field_by_name在Django 1.6中返回一个元组,第一个元素作为字段对象本身。

要获取此实例的此字段的值,请使用: getattr(self, fieldName[0])

所以代码看起来像:

for fieldName in approvedFields:
        field = getattr(self, fieldName[0])
        if field != self._meta.get_field_by_name(fieldName[0]).default:
            resultFieldPairs.append(tuple([fieldName[1], field]))