【发布时间】:2023-03-22 04:58:02
【问题描述】:
各位程序员大家好!
我正在阅读有关通过运行 ...python manage.py shell 实现的交互式 shell 的功能。这是我以前做过很多次的事情,但是我不太确定实际的 shell 是如何与 Django 连接的。在问这个问题之前,我确实试图通过官方文档以及该网站上的其他帖子找到我的方式。这个问题似乎没有像我这样的初学者可以理解的答案。
我读到manage.py shell-command '为我们提供了一个交互式 shell,其中 Python 路径为 Django 正确设置。'。我知道它可以用来与 Django 项目交互,以及查询配置的数据库和模型——但是在幕后会发生什么?
比如写ModelName.objects.all()的时候——.objects和.all()的出处是什么,因为好像不是纯python语法? Django 是如何理解这个的?
shell 是否是 Django 提供的特殊 python 版本,并添加了一些 Django 可以理解的语法?因为那是有道理的。
谢谢你来自瑞典!
【问题讨论】:
-
.objects()更多是元类等的结果。 -
我不明白你的问题。
objects和all在您的服务器代码中的工作与它们在 shell 中的工作一样好。无论如何,它们只是标准属性。为什么你认为这与外壳有关? -
这是我的猜测,因为它不是纯 Python 语法。我的猜测是它是 django 数据库 API,这是我听过几次的东西。那是对的吗?如果是,那是什么意思?
-
这是完全正常的 Python 语法,所以我还是不明白你的意思。 Model 类定义了一个
objects属性,它是一个Manager,它有一个方法.all()。这没什么特别的。 -
我可能用了错误的词来描述我想说的话,对此深表歉意。我的意思是我从未在 Django 上下文之外看到过 '.objects' 等,并不是说语法不正确。我现在明白它们是从 Model 类继承的,这很有意义。 Django 数据库 API 到底是什么?你能帮我在 shell 和我读过这么多的 API 之间建立联系吗?非常感谢,w