1.每一个视图函数都有一个HttpResquest对象的参数,返回HttpResponse对象
2.从url中获取除了request的其他参数
url(r '^time/(\d{1,2})/$', views.time) 其中(\d{1,2}) 就是传给视图函数time的参数
3.filter模糊匹配
>>> Publisher.objects.filter(name__contains="press")
[<Publisher: Apress>]
在 name 和 contains 之间有双下划线。和Python一样,Django也使用双下划线来表明会进行一些魔术般的操作。这里,contains部分会被Django翻译成LIKE语句:
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE name LIKE '%press%';
4. get获取单个对象
Publisher.objects.get(name=press) 当查询的结果是list时,会报错
5.限制返回的数据
另一个常用的需求就是取出固定数目的记录。 想象一下你有成千上万的出版商在你的数据库里, 但是你只想显示第一个。 你可以使用标准的Python列表裁剪语句:
>>> Publisher.objects.order_by('name')[0]
<Publisher: Apress>
这相当于:
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
ORDER BY name
LIMIT 1;
类似的,你可以用Python的range-slicing语法来取出数据的特定子集:
>>> Publisher.objects.order_by('name')[0:2]
这个例子返回两个对象,等同于以下的SQL语句:
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
ORDER BY name
OFFSET 0 LIMIT 2;
注意,不支持Python的负索引(negative slicing):
>>> Publisher.objects.order_by('name')[-1]
Traceback (most recent call last):
...
AssertionError: Negative indexing is not supported.
虽然不支持负索引,但是我们可以使用其他的方法。 比如,稍微修改 order_by() 语句来实现:
>>> Publisher.objects.order_by('-name')[0]
本文介绍了Django中ORM的基本查询技巧,包括通过视图函数处理HTTP请求与响应、从URL中提取参数、使用filter进行模糊匹配查询、get方法获取单个对象、以及如何通过order_by结合切片语法限制返回的数据量。
194

被折叠的 条评论
为什么被折叠?



