【问题标题】:Iteratively extract model instance's field value and default value based on field name in Django 1.6在Django 1.6中根据字段名迭代提取模型实例的字段值和默认值
【发布时间】:2014-11-02 22:33:20
【问题描述】:

所以我想在我的模型类中创建一个方法(我对视图使用 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 文档似乎并不清楚这个对象的属性和方法。

请帮忙。

【问题讨论】:

  • 期望从field.value() 得到什么你的意思是getattr(self, field.name)
  • 是的,我只是不知道实际的代码是什么:P

标签: django django-templates django-models


【解决方案1】:

我不知道解决内部_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]))

【讨论】:

  • AttributeError: 'int' object has no attribute 'default' 所以现在我们只需要一种方法来获取字段的默认值。
  • 我需要你的模型类代码来理解那个。也许您的字段没有默认值?
  • 对不起!编辑后我没有附加我的代码。它现在似乎正在工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-01-28
  • 2010-10-19
  • 2011-04-04
  • 2010-11-21
  • 2011-02-16
  • 2015-01-23
  • 2012-08-09
相关资源
最近更新 更多