Django - 如何检查查询集的所有属性?

10

我正在寻找一种方法,在使用queryset设置变量值后获取该变量的所有属性。

例如...请参考下面的代码...使用user.id或user.first_name,我可以获取该属性的值。但是如果我想检查它具有哪些其他属性?我能不能得到一个方法。

如果我们使用user,那么它将只返回在admin.py中定义的

我正在使用Django Shell的代码

from django.contrib.auth.models import User
user=User.objects.get(id=1)
user.first_name # Will return some value say testUser
user.id  # will return some value say 1
4个回答

14
我猜你的意思是想打印一个对象的所有属性而不是QuerySet。
要打印一个对象的所有属性,可以按照以下步骤进行:
from django.contrib.auth.models import User
user=User.objects.get(id=1)
print(user.__dict__)

但是,如果您只想了解Django默认用户模型字段是什么,可以查看此文档: https://docs.djangoproject.com/en/3.0/ref/contrib/auth/


太好了,这正是我在寻找的。非常感谢。 - Mayank Tripathi
1
这个 .dict 可以用于任何变量(保存数据的变量),而不仅仅是上面的用户。 - Mayank Tripathi
@MayankTripathi 你应该把这个标记为解决了你的问题的答案。 - undefined

6

补充@MarkL的回答: 您可以使用漂亮的打印格式以提高可读性。

from django.contrib.auth.models import User
from pprint import pprint # new
user=User.objects.get(id=1)
pprint(user.__dict__) # new ---->  pprint() instead of print()

我总是更喜欢使用vars()方法,而不是__dict__的另一种方式:

user=User.objects.get(id=1)
pprint(vars(user)) 

两者返回相同的结果,但对我来说,vars() 比魔术方法字典 __dict__ 更方便编写,因为我懒得写四个下划线。


6

Django 3.0:

如果需要,Django会返回与模型相关的字段元组。

from django.contrib.auth.models import User
    User._meta.get_fields()

._meta.get_fields(),这将返回所有字段以及与其他模型的关系。很酷。这非常有帮助,可以检查模型之间的关系。非常感谢。 - Mayank Tripathi

1

在MarkL的回答基础上,这里提供了同样的内容,但格式更加美观:

[f"{key}: {value}" for key, value in user.__dict__.items()]

(抱歉,我的声望不够高,无法将此作为评论发布。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接