Django模型循环字段

6 投票
2 回答
2695 浏览
提问于 2025-04-16 03:10

我该如何遍历并获取一个Django模型的所有字段呢?

我知道用 foo.item._meta.get_all_field_names() 可以得到所有字段的名字。那我该如何在模型实例上访问这些字段(包括它们的实际值)呢?(除了用正常的方式 foo.fieldname)。

我需要这样做是为了为我的模型构建一个自定义的输出,包括它的多对多关系。有什么想法吗?

2 个回答

3

这看起来不太美观,但它可以正常工作:

for each in model_instance._meta.fields: 
    print each.value_from_object(model_instance)

不过,我还有另一个建议。考虑到你的需求是

为我的模型构建一个自定义输出,包括它的多对多关系。

那你考虑一下 序列化 实例为合适的格式(比如XML或JSON),然后再进行处理?这样可以避免依赖 _meta 或任何内部方法(这些方法可能会改变)。

8

这样做怎么样:

getattr(foo.__class__, <field_name>)

这样应该能让你得到字段对象,而不是在给定模型实例中的值。如果你想要在这个模型实例中获取字段的值,可以这样调用:

getattr(foo, <field_name>)

撰写回答