You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中获取并显示已创建对象所有属性值的方法有哪些?

在Django中获取并显示对象所有属性值的方法

当然有啦!你不用每次手动指定属性名来打印,Django和Python本身就提供了好几种通用的方式,帮你轻松查看对象的所有属性值,下面给你详细说说:

1. 利用Python对象的__dict__属性

这是Python所有对象自带的属性,会返回一个包含对象属性和对应值的字典。不过要注意,它会包含一些Django内部的属性(比如_state),你可以简单过滤掉这些下划线开头的内部属性:

# 打印所有属性(含内部属性)
print(p.__dict__)

# 只打印自定义的模型字段属性
filtered_attrs = {k: v for k, v in p.__dict__.items() if not k.startswith('_')}
print(filtered_attrs)

2. 使用Django的_meta API(最精准)

这个方法直接对接你的模型定义,能精准获取你在模型里声明的所有字段,完全不会包含无关的内部属性。示例代码:

from django.db.models import Field

# 遍历模型的所有字段并打印对应值
for field in p._meta.get_fields():
    # 过滤掉反向关联、多对多关系等非普通字段
    if isinstance(field, Field):
        print(f"{field.name}: {getattr(p, field.name)}")

如果你想把结果整理成字典,也可以这样写:

field_values = {field.name: getattr(p, field.name) for field in p._meta.get_fields() if isinstance(field, Field)}
print(field_values)

3. 用dir()函数筛选属性

dir()会列出对象的所有属性和方法,不过信息比较杂,需要过滤掉方法和内部属性:

# 先筛选出非内部、非方法的属性
attrs = [attr for attr in dir(p) if not attr.startswith('_') and not callable(getattr(p, attr))]
# 遍历打印属性值
for attr in attrs:
    print(f"{attr}: {getattr(p, attr)}")

4. 自定义模型方法(长期复用)

如果经常需要查看对象的所有属性值,直接在模型里写一个自定义方法会更方便:

from django.db import models

class YourModel(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    software_name = models.CharField(max_length=100)

    # 自定义方法返回所有字段及值
    def get_all_field_values(self):
        return {
            field.name: getattr(self, field.name) 
            for field in self._meta.get_fields() 
            if isinstance(field, models.Field)
        }

之后在Python shell里,直接调用这个方法就行:

print(p.get_all_field_values())

另外,你也可以重写__str__方法,让直接打印对象时显示更友好的信息:

def __str__(self):
    return f"{self.first_name} {self.last_name} - {self.software_name}"

这样在shell里输入print(p)就会看到格式化后的内容啦~

内容的提问来源于stack exchange,提问作者aspiring

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:36:21