如何打印Django model过滤查询得到的完整记录内容
Django打印QuerySet完整记录的解决方法
你当前看到的是Django模型实例的默认输出格式,默认只显示模型类名和主键值,想要看到完整字段内容可以参考以下方案:
方案1:自定义模型__str__方法(推荐,全局生效)
在StudentInfo模型的定义代码中新增__str__方法,自定义实例的展示规则,修改后所有打印该模型实例的场景都会生效:
class StudentInfo(models.Model): # 原有字段定义保持不变 Name = models.CharField(max_length=100) School = models.CharField(max_length=100) City = models.CharField(max_length=100) Country = models.CharField(max_length=100) # 新增__str__方法 def __str__(self): return f"姓名:{self.Name} | 学校:{self.School} | 城市:{self.City} | 国家:{self.Country}"
修改后再执行print(record)就会按照你定义的格式显示每条记录的内容。
方案2:用values()方法返回字段字典(临时调试用)
如果不想修改模型代码,仅临时需要打印完整字段,可以在查询时调用values()方法,直接将每个实例转换为「字段名-字段值」格式的字典:
record = StudentInfo.objects.filter( Name=name, School=school, City=city, Country=country ).values() # 转为列表后打印即可看到所有字段内容 print(list(record))
如果只需要打印指定字段,可以给values传参,比如.values('Name', 'City')就只会返回这两个字段的内容。
方案3:遍历实例读取所有属性
如果已经拿到了QuerySet对象,也可以遍历每个实例,通过__dict__属性获取所有字段值:
for student in record: # 过滤掉Django内部使用的_state字段 student_info = {k:v for k,v in student.__dict__.items() if k != '_state'} print(student_info)
内容的提问来源于stack exchange,提问作者ThatRandomDeveloper
相关产品推荐
相关产品推荐

