Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django';s ORM可以在不调用函数的情况下获取一对一字段_Python_Python 3.x_Django_Django Orm - Fatal编程技术网

Python django';s ORM可以在不调用函数的情况下获取一对一字段

Python django';s ORM可以在不调用函数的情况下获取一对一字段,python,python-3.x,django,django-orm,Python,Python 3.x,Django,Django Orm,假设我有一个django模型,如下所示: 类配置文件(models.Model): user=models.OneToOneField(用户,on_delete=models.CASCADE) 创建此一对一字段后,可以通过执行user\u instance.profile 我已经为ORM启用了日志记录功能,以便在我的settings.py文件中查看发送到数据库的查询: 日志记录={ “版本”:1, “禁用现有日志记录器”:False, “处理程序”:{ “控制台”:{ 'class':'log

假设我有一个django模型,如下所示:

类配置文件(models.Model):
user=models.OneToOneField(用户,on_delete=models.CASCADE)
创建此一对一字段后,可以通过执行
user\u instance.profile

我已经为ORM启用了日志记录功能,以便在我的
settings.py
文件中查看发送到数据库的查询:

日志记录={
“版本”:1,
“禁用现有日志记录器”:False,
“处理程序”:{
“控制台”:{
'class':'logging.StreamHandler',
},
},
“伐木工人”:{
“django.db.backends”:{
“处理程序”:[“控制台”],
'level':os.getenv('DJANGO_LOG_level','DEBUG'),
"传播":假,,
},
},
}
然后,我使用python3 manage.py shell打开shell,并执行以下操作:

firstuser = User.objects.first()
这导致以下查询注销:

SELECT "users_user"."id", "users_user"."password", "users_user"."last_login", "users_user"."is_superuser", "users_user"."username", "users_user"."is_staff", "users_user"."is_active", "users_user"."date_joined", "users_user"."name", "users_user"."email", "users_user"."join_date", "users_user"."date_of_birth" FROM "users_user" ORDER BY "users_user"."id" ASC LIMIT 1; args=()
SELECT "users_profile"."id", "users_profile"."user_id", "users_profile"."status", "users_profile"."institute" FROM "users_profile" WHERE "users_profile"."user_id" = 1 LIMIT 21; args=(1,)
此外,我还:

firstuser.profile
并已注销此查询:

SELECT "users_user"."id", "users_user"."password", "users_user"."last_login", "users_user"."is_superuser", "users_user"."username", "users_user"."is_staff", "users_user"."is_active", "users_user"."date_joined", "users_user"."name", "users_user"."email", "users_user"."join_date", "users_user"."date_of_birth" FROM "users_user" ORDER BY "users_user"."id" ASC LIMIT 1; args=()
SELECT "users_profile"."id", "users_profile"."user_id", "users_profile"."status", "users_profile"."institute" FROM "users_profile" WHERE "users_profile"."user_id" = 1 LIMIT 21; args=(1,)
那么,当我请求相关对象时,django如何执行查询,而不必在自己的代码中调用任何函数

是否有一个python方法来重写如何读取类中的属性的行为


提前谢谢

我想知道django是如何在不调用代码中的任何函数的情况下进行这些惰性计算的,你说的“django如何进行这些惰性计算”和“不调用代码中的任何函数”是什么意思?你的问题是什么?你想知道django是怎么做的吗?不调用任何函数是什么意思?python中的底层机制在我的代码中称为@NavidZarepak,如上所述,我读取属性
user.profile
,当我访问它时,我会延迟加载profile对象。在我的代码中,我没有像
get_profile
@Wombatz这样的名字,这正是我想知道的,非常感谢Wombatz!