您的位置:首页技术文章
文章详情页

django正续或者倒序查库实例

【字号: 日期:2024-10-03 18:21:22浏览:3作者:猪猪

Django的ORDER_BY查询集,升序和降序

如何订购由降我的查询在Django按日期设定?

Reserved.objects.all().filter(client=client_id).order_by(’check_in’)

我只是想从降所有由check_in日期保留筛选。 任何人都可以可以的想法? 提前致谢

1.

Reserved.objects.all().filter(client=client_id).order_by(’-check_in’)

注意-前check_inDjango的

2.

Reserved.objects.filter(client=client_id).order_by(’-check_in’)

连字符“-”在“check_in”前表示降序排列。升序是不言而喻的。

我们不必过滤器之前添加的所有()()。这将仍然有效,但你只需要添加所有()当你想从根本上查询集的所有对象。

更多关于这个在这里:

3.

它的工作原理去除

.all():Reserved.objects.filter(client=client_id).order_by(’-check_in’)

补充知识:os.getcwd()、sys.path[0]、sys.argv[0]和__file__的区别

要分清这几个的区别与使用条件,实际测试一下是最准确的。

设计测试方法:

一个主模块用来运行,一个子模块用来被主模块调用

主模块路径:

/Users/stephen/Documents/code/test_dir/01test

子模块路径:

/Users/stephen/Documents/code/test_dir/02test

运行模块的路径:

/Users/stephen/Documents/code/test_dir/01test/001_test

ok 现在编写两模块代码

子模块 submodule.py

import osimport sysdef child_test():print(’sub os.getcwd():{}’.format(os.getcwd()))print(’sub sys.path[0]:{}’.format(sys.path[0]))print(’sub sys.argv[0]:{}’.format(sys.argv[0]))print(’sub __file__:{}’.format(__file__))if __name__ == ’__main__’:chid_test()

主模块 mainmodule.py

import osimport sysimport submoduledef main(): print(’main os.getcwd():{}’.format(os.getcwd())) print(’main sys.path[0]:{}’.format(sys.path[0])) print(’main sys.argv[0]:{}’.format(sys.argv[0])) print(’main __file__:{}’.format(__file__)) submodule.child_test()if __name__ == ’__main__’: main()

目录结构

├── 01test│ ├── 001_test # 运行目录│ └── mainmodule.py # 主模块└── 02test └── submodule.py # 被调用模块

ok 来看看结果

Traceback (most recent call last): File '../mainmodule.py', line 3, in <module> import submoduleModuleNotFoundError: No module named ’submodule’

我去,出现了点小状况

原因是系统找不到该模块的路径,我们来人工添加一个路径

在主模块中前面添加

sys.path.append(’/Users/stephen/Documents/code/test_dir/02test/’)

再来试试 - -

结果如下:

main os.getcwd():/Users/stephen/Documents/code/test_dir/01test/001_testmain sys.path[0]:/Users/stephen/Documents/code/test_dir/01testmain sys.argv[0]:../mainmodule.pymain __file__:../mainmodule.pysub os.getcwd():/Users/stephen/Documents/code/test_dir/01test/001_testsub sys.path[0]:/Users/stephen/Documents/code/test_dir/01testsub sys.argv[0]:../mainmodule.pysub __file__:/Users/stephen/Documents/code/test_dir/02test/submodule.py

结合目录结构看就清楚了

├── 01test│ ├── 001_test # 运行目录│ └── mainmodule.py # 主模块└── 02test └── submodule.py # 被调用模块

os.getcwd() 指的是运行程序的目录 (绝对路径)

sys.path[0] 主要模块的目录 (绝对路径)

sys.argv[0] 运行模块时,pyhton 后面的参数

__file__ 这个就有点奇怪了,主模块显示的相对路径,而被调用模块却用的绝对路径

__file__ 还是有点疑虑,于是去 stack overflow(click to)看到了这句话,如下:

So, if you are outside the part of sys.path that contains the module, you’ll get an absolute path. If you are inside the part of sys.path that contains the module, you’ll get a relative path.

If you load a module in the current directory, and the current directory isn’t in sys.path, you’ll get an absolute path.

If you load a module in the current directory, and the current directory is in sys.path, you’ll get a relative path.

意思大致是:

如果你(你所在的当前目录)不在sys.path的范围里,你会得到绝对路径,反之,你会得到相对路径

如果你在当前目录加载模块,并且当前目录在sys.path 里, 你会得到相对路径。

对比上面的结果,符合。

不过我们还是应该再来验证下。我们把当前路径换到子模块下

├── 01test│ ├── 001_test │ └── mainmodule.py # 主模块└── 02test # 当前目录└── submodule.py # 被调用模块

结果如下:

main os.getcwd():/Users/stephen/Documents/code/test_dir/02testmain sys.path[0]:/Users/stephen/Documents/code/test_dir/01testmain sys.argv[0]:../01test/mainmodule.pymain __file__:../01test/mainmodule.pysub os.getcwd():/Users/stephen/Documents/code/test_dir/02testsub sys.path[0]:/Users/stephen/Documents/code/test_dir/01testsub sys.argv[0]:../01test/mainmodule.pysub __file__:/Users/stephen/Documents/code/test_dir/02test/submodule.py

是不是觉得有问题?幸亏我们测试了

突然想起我我运行mainmodule用的相对路径

像这样:

$ python ../01test/mainmodule.py

然后__file__就是相对路径的,如果我们换成绝对路径呢?

$ python /Users/stephen/Documents/code/test_dir/01test/mainmodule.py

结果如下:

main os.getcwd():/Users/stephen/Documents/code/test_dir/02testmain sys.path[0]:/Users/stephen/Documents/code/test_dir/01testmain sys.argv[0]:/Users/stephen/Documents/code/test_dir/01test/mainmodule.pymain __file__:/Users/stephen/Documents/code/test_dir/01test/mainmodule.pysub os.getcwd():/Users/stephen/Documents/code/test_dir/02testsub sys.path[0]:/Users/stephen/Documents/code/test_dir/01testsub sys.argv[0]:/Users/stephen/Documents/code/test_dir/01test/mainmodule.pysub __file__:/Users/stephen/Documents/code/test_dir/02test/submodule.pysoga!

终于弄清楚了,突然有种小兴奋啊

总结一下:

os.getcwd() 指的是当前目录,绝对路径

sys.path[0] sys.path 指的是path,sys.path[0]为主模块目录的绝对路径,在模块运行的时候被自动添加进去

sys.argv[0] 就是你运行时 python 后面跟的参数

__file__ 表示所在模块文件的路径,和系统找到该模块的方式有关,你是用绝对路径去加载该模块,那么__file__就为绝对模块文件路径,如果你给系统提供相对路径去加载该模块,那么改文件路径为相对路径

以上这篇django正续或者倒序查库实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持好吧啦网。

标签: Django
相关文章: