如何在使用Django _meta.get_fields()时排除字段

时间:2017-03-18 16:22:35

标签: python django

我的模特有标准" id"字段,我想在使用_meta.get_fields()时将其排除。我目前的解决方案看起来像这样:

context_var = (MyModel._meta.get_fields())[1:]

它运作良好,但我不太喜欢切片解决方案。我宁愿按名称删除id字段,也不要使用明确排除id字段的方法。有更优雅的解决方案吗?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

context_var = [f for f in MyModel._meta.get_fields() if f.name != 'id']

答案 1 :(得分:0)

或者,您可以使用Python内置的filter()函数:

In [1]: context_var = filter(lambda x: x.name != 'id', MyModel._meta.fields)

In [2]: type(context_var)
Out[2]: filter

In [3]: for item in context_var: print(item)

MyModel.field1
MyModel.field2
...

结果值的类型为filter,您可以对其进行迭代,但是根据以后需要对context_var进行的操作,您可能希望将其转换为元组:

In [4]: context_var = tuple(filter(lambda x: x.name != 'id', MyModel._meta.fields))