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
相关产品推荐
相关产品推荐

