-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathi-am-just-testing.html
422 lines (345 loc) · 51.5 KB
/
i-am-just-testing.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Won" />
<meta name="copyright" content="Won" />
<meta name="keywords" content="Django, It, " />
<title>I am just Testing · Tugqi Biz
</title>
<link href="http://cdn-images.mailchimp.com/embedcode/slim-081711.css" rel="stylesheet" type="text/css">
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="http://wbowam.github.io/theme/css/style.css" media="screen">
<link rel="stylesheet" type="text/css" href="http://wbowam.github.io/theme/css/solarizedlight.css" media="screen">
<link rel="shortcut icon" href="http://wbowam.github.io/theme/images/favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="http://wbowam.github.io/theme/images/apple-touch-icon.png" />
<link rel="apple-touch-icon" sizes="57x57" href="http://wbowam.github.io/theme/images/apple-touch-icon-57x57.png" />
<link rel="apple-touch-icon" sizes="72x72" href="http://wbowam.github.io/theme/images/apple-touch-icon-72x72.png" />
<link rel="apple-touch-icon" sizes="114x114" href="http://wbowam.github.io/theme/images/apple-touch-icon-114x114.png" />
<link rel="apple-touch-icon" sizes="144x144" href="http://wbowam.github.io/theme/images/apple-touch-icon-144x144.png" />
<link rel="icon" href="http://wbowam.github.io/theme/images/apple-touch-icon-144x144.png" />
</head>
<body>
<div id="content-sans-footer">
<div class="navbar navbar-static-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="http://wbowam.github.io/"><span class=site-name>Tugqi Biz</span></a>
<div class="nav-collapse collapse">
<ul class="nav pull-right top-menu">
<li ><a href="http://wbowam.github.io">Home</a></li>
<li ><a href="http://wbowam.github.io/categories.html">Categories</a></li>
<li ><a href="http://wbowam.github.io/tags.html">Tags</a></li>
<li ><a href="http://wbowam.github.io/archives.html">Archives</a></li>
<li><form class="navbar-search" action="http://wbowam.github.io/search.html" onsubmit="return validateForm(this.elements['q'].value);"> <input type="text" class="search-query" placeholder="Search" name="q" id="tipue_search_input"></form></li>
</ul>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span1"></div>
<div class="span10">
<article>
<div class="row-fluid">
<header class="page_header span10">
<h1><a href="http://wbowam.github.io/i-am-just-testing.html"> I am just Testing </a></h1>
</header>
</div>
<div class="row-fluid">
<div class="span10 article-content">
<div class="highlight"><pre><span class="n">class</span> <span class="n">Poll</span><span class="p">(</span><span class="n">models</span><span class="p">.</span><span class="n">Model</span><span class="p">)</span><span class="o">:</span>
<span class="n">slug</span> <span class="o">=</span> <span class="n">models</span><span class="p">.</span><span class="n">SlugField</span><span class="p">(</span><span class="n">unique_for_month</span><span class="o">=</span><span class="err">'</span><span class="n">pub_date</span><span class="err">'</span><span class="p">)</span>
<span class="n">question</span> <span class="o">=</span> <span class="n">models</span><span class="p">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">maxlength</span><span class="o">=</span><span class="mi">255</span><span class="p">)</span>
<span class="n">pub_date</span> <span class="o">=</span> <span class="n">models</span><span class="p">.</span><span class="n">DateTimeField</span><span class="p">()</span>
<span class="n">expire_date</span> <span class="o">=</span> <span class="n">models</span><span class="p">.</span><span class="n">DateTimeField</span><span class="p">()</span>
<span class="n">def</span> <span class="n">__repr__</span><span class="p">(</span><span class="n">self</span><span class="p">)</span><span class="o">:</span>
<span class="k">return</span> <span class="n">self</span><span class="p">.</span><span class="n">question</span>
<span class="n">class</span> <span class="n">Meta</span><span class="o">:</span>
<span class="n">get_latest_by</span> <span class="o">=</span> <span class="err">'</span><span class="n">pub_date</span><span class="err">'</span>
<span class="n">class</span> <span class="n">Choice</span><span class="p">(</span><span class="n">models</span><span class="p">.</span><span class="n">Model</span><span class="p">)</span><span class="o">:</span>
<span class="n">poll</span> <span class="o">=</span> <span class="n">models</span><span class="p">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="n">Poll</span><span class="p">,</span> <span class="n">edit_inline</span><span class="o">=</span><span class="n">models</span><span class="p">.</span><span class="n">TABULAR</span><span class="p">,</span>
<span class="n">num_in_admin</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">min_num_in_admin</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
<span class="n">choice</span> <span class="o">=</span> <span class="n">models</span><span class="p">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">maxlength</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span> <span class="n">core</span><span class="o">=</span><span class="n">True</span><span class="p">)</span>
<span class="n">votes</span> <span class="o">=</span> <span class="n">models</span><span class="p">.</span><span class="n">IntegerField</span><span class="p">(</span><span class="n">editable</span><span class="o">=</span><span class="n">False</span><span class="p">,</span> <span class="k">default</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="n">def</span> <span class="n">__repr__</span><span class="p">(</span><span class="n">self</span><span class="p">)</span><span class="o">:</span>
<span class="k">return</span> <span class="n">self</span><span class="p">.</span><span class="n">choice</span>
</pre></div>
<h3 id="p1">获得一个数据对象p1<a class="headerlink" href="#p1" title="Permanent link">¶</a></h3>
<div class="highlight"><pre><span class="n">from</span> <span class="n">datetime</span> <span class="n">import</span> <span class="n">datetime</span>
<span class="n">p1</span> <span class="o">=</span> <span class="n">Poll</span><span class="p">(</span><span class="n">slug</span><span class="o">=</span><span class="err">'</span><span class="n">whatsup</span><span class="err">'</span><span class="p">,</span> <span class="n">question</span><span class="o">=</span><span class="s">"What's up?"</span><span class="p">,</span>\
<span class="n">pub_date</span><span class="o">=</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">20</span><span class="p">),</span> <span class="n">expire_date</span><span class="o">=</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">20</span><span class="p">))</span>
<span class="n">p1</span><span class="p">.</span><span class="n">save</span><span class="p">()</span>
</pre></div>
<ul>
<li>数据对象有一个初始方法save()</li>
</ul>
<h3 id="_1">获取结果集对象<a class="headerlink" href="#_1" title="Permanent link">¶</a></h3>
<h4 id="p2">无限制获取对象集p2<a class="headerlink" href="#p2" title="Permanent link">¶</a></h4>
<div class="highlight"><pre><span class="n">p2</span><span class="o">=</span><span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">all</span><span class="p">()</span>
<span class="o">>>></span><span class="n">p2</span>
<span class="p">[</span><span class="n">What</span><span class="err">'</span><span class="n">s</span> <span class="n">up</span><span class="o">?</span><span class="p">,</span> <span class="n">What</span><span class="err">'</span><span class="n">s</span> <span class="n">your</span> <span class="n">name</span><span class="o">?</span><span class="p">]</span>
</pre></div>
<h6 id="p2_1">注意:在这里p2是个对象集,自身也是个对象。<a class="headerlink" href="#p2_1" title="Permanent link">¶</a></h6>
<h4 id="_2">增加一些限制条件直到描述的子集满足你的需要。<a class="headerlink" href="#_2" title="Permanent link">¶</a></h4>
<p>最常用的两个定制结果集的方法是:</p>
<div class="highlight"><pre><span class="n">filter</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="err">返回一个匹配查询参数的新的结果集</span><span class="p">.</span>
<span class="n">exclude</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="err">返回一个不匹配查询参数的新的结果集</span><span class="p">.</span>
</pre></div>
<p>这两个方法的返回值都是结果集对象,因此结果集可以进行链式处理:</p>
<div class="highlight"><pre><span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">question__startswith</span><span class="o">=</span><span class="s">"What"</span><span class="p">)</span>\
<span class="p">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">pub_date__gte</span><span class="o">=</span><span class="n">datetime</span><span class="p">.</span><span class="n">now</span><span class="p">())</span>\
<span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">pub_date__gte</span><span class="o">=</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span>
</pre></div>
<p>以一个初始结果集作为参数, 然后进行过滤, 再进行排除, 再进行另一个过滤. <br />
这样得到的最终结果就一个问题开头单词是 "What", 发布日期在 2005年1月1日至今的所有民意测验的集合. </p>
<p>每个结果集都是一个独一无二的对象. 以上操作的每一步都生成了一个新的结果集: </p>
<div class="highlight"><pre><span class="n">q1</span> <span class="o">=</span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">question__startswith</span><span class="o">=</span><span class="s">"What"</span><span class="p">)</span>
<span class="n">q2</span> <span class="o">=</span> <span class="n">q1</span><span class="p">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">pub_date__gte</span><span class="o">=</span><span class="n">datetime</span><span class="p">.</span><span class="n">now</span><span class="p">())</span>
<span class="n">q3</span> <span class="o">=</span> <span class="n">q1</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">pub_date__gte</span><span class="o">=</span><span class="n">datetime</span><span class="p">.</span><span class="n">now</span><span class="p">())</span>
</pre></div>
<p>这三步生成了三个结果集; 一个初始结果集包含所有的以"What"开头的民意测验, 两个初始结果集的子集(一个排除条件,一个过滤条件). <br />
对原始结果集的改进过程并没有影响到原始的结果集.</p>
<h6 id="_3">值得注意的是结果集的创建根本没有访问数据库.只有当对结果集取值时才会访问数据库.<a class="headerlink" href="#_3" title="Permanent link">¶</a></h6>
<h3 id="_4">字段查询<a class="headerlink" href="#_4" title="Permanent link">¶</a></h3>
<p>以 field__lookuptype (注意是双下线)形式进行基本的字段查询,举例来说:</p>
<div class="highlight"><pre><span class="n">polls</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">pub_date__lte</span><span class="o">=</span><span class="n">datetime</span><span class="p">.</span><span class="n">now</span><span class="p">())</span>
</pre></div>
<p>该查询翻译成SQL就是:</p>
<div class="highlight"><pre><span class="n">SELECT</span> <span class="o">*</span> <span class="n">FROM</span> <span class="n">polls_polls</span> <span class="n">WHERE</span> <span class="n">pub_date</span> <span class="o"><=</span> <span class="n">NOW</span><span class="p">();</span>
</pre></div>
<h3 id="db-api">DB API 支持下列查找类型:<a class="headerlink" href="#db-api" title="Permanent link">¶</a></h3>
<div class="highlight"><pre><span class="err">类型</span> <span class="err">描述</span>
<span class="n">exact</span> <span class="err">精确匹配</span><span class="o">:</span> <span class="n">polls</span><span class="p">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">id__exact</span><span class="o">=</span><span class="mi">14</span><span class="p">).</span>
<span class="n">iexact</span> <span class="err">忽略大小写的精确匹配</span><span class="o">:</span> <span class="n">polls</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">slug__iexact</span><span class="o">=</span><span class="s">"foo"</span><span class="p">)</span> <span class="err">匹配</span> <span class="n">foo</span><span class="p">,</span> <span class="n">FOO</span><span class="p">,</span> <span class="n">fOo</span><span class="p">,</span> <span class="err">等等</span><span class="p">.</span>
<span class="n">contains</span> <span class="err">大小写敏感的内容包含测试</span><span class="o">:</span> <span class="n">polls</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">question__contains</span><span class="o">=</span><span class="s">"spam"</span><span class="p">)</span> <span class="err">返回</span><span class="n">question</span> <span class="err">中包含</span> <span class="s">"spam"</span> <span class="err">的所有民意测验</span><span class="p">.(</span><span class="err">仅</span><span class="n">PostgreSQL</span> <span class="err">和</span> <span class="n">MySQL</span><span class="err">支持</span><span class="p">.</span> <span class="n">SQLite</span> <span class="err">的</span><span class="n">LIKE</span> <span class="err">语句不支持大小写敏感特性</span><span class="p">.</span> <span class="err">对</span><span class="n">Sqlite</span> <span class="err">来说</span><span class="p">,</span> <span class="n">contains</span> <span class="err">等于</span> <span class="n">icontains</span><span class="p">.)</span>
<span class="n">icontains</span> <span class="err">大小写不敏感的内容包含测试</span><span class="o">:</span>
<span class="n">gt</span> <span class="err">大于</span><span class="o">:</span> <span class="n">polls</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">id__gt</span><span class="o">=</span><span class="mi">4</span><span class="p">).</span>
<span class="n">gte</span> <span class="err">大于等于</span><span class="p">.</span>
<span class="n">lt</span> <span class="err">小于</span><span class="p">.</span>
<span class="n">lte</span> <span class="err">小于等于</span><span class="p">.</span>
<span class="n">ne</span> <span class="err">不等于</span><span class="p">.</span>
<span class="n">in</span> <span class="err">位于给定列表中</span><span class="o">:</span> <span class="n">polls</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">id__in</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">])</span> <span class="err">返回一个</span> <span class="n">polls</span> <span class="err">列表</span><span class="p">(</span><span class="n">ID</span> <span class="err">值分别是</span> <span class="mi">1</span><span class="err">或</span><span class="mi">3</span><span class="err">或</span><span class="mi">4</span><span class="p">).</span>
<span class="n">startswith</span> <span class="err">大小写敏感的</span> <span class="n">starts</span><span class="o">-</span><span class="n">with</span><span class="o">:</span> <span class="n">polls</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">question__startswith</span><span class="o">=</span><span class="s">"Would"</span><span class="p">).(</span><span class="err">仅</span><span class="n">PostgreSQL</span> <span class="err">和</span><span class="n">MySQL</span><span class="err">支持</span><span class="p">.</span> <span class="n">SQLite</span> <span class="err">的</span><span class="n">LIKE</span> <span class="err">语句不支持大小写敏感特性</span><span class="p">.</span> <span class="err">对</span><span class="n">Sqlite</span> <span class="err">来说</span><span class="p">,</span><span class="err">``</span><span class="n">startswith</span><span class="err">``</span> <span class="err">等于</span> <span class="n">istartswith</span><span class="p">)</span>
<span class="n">endswith</span> <span class="err">大小写敏感的</span> <span class="n">ends</span><span class="o">-</span><span class="n">with</span><span class="p">.</span> <span class="p">(</span><span class="err">仅</span><span class="n">PostgreSQL</span> <span class="err">和</span> <span class="n">MySQL</span><span class="p">)</span>
<span class="n">istartswith</span> <span class="err">大小写不敏感的</span> <span class="n">starts</span><span class="o">-</span><span class="n">with</span><span class="p">.</span>
<span class="n">iendswith</span> <span class="err">大小写不敏感的</span> <span class="n">ends</span><span class="o">-</span><span class="n">with</span><span class="p">.</span>
<span class="n">range</span> <span class="err">范围测试</span><span class="o">:</span> <span class="n">polls</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">pub_date__range</span><span class="o">=</span><span class="p">(</span><span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">))</span> <span class="err">返回</span> <span class="n">pub_date</span> <span class="err">位于</span> <span class="n">start_date</span> <span class="err">和</span> <span class="n">end_date</span> <span class="p">(</span><span class="err">包括</span><span class="p">)</span><span class="err">之间的所有民意测验</span>
<span class="n">year</span> <span class="err">对</span> <span class="n">date</span><span class="o">/</span><span class="n">datetime</span> <span class="err">字段</span><span class="p">,</span> <span class="err">进行精确的</span> <span class="err">年</span> <span class="err">匹配</span><span class="o">:</span> <span class="n">polls</span><span class="p">.</span><span class="n">get_count</span><span class="p">(</span><span class="n">pub_date__year</span><span class="o">=</span><span class="mi">2005</span><span class="p">).</span>
<span class="n">month</span> <span class="err">对</span> <span class="n">date</span><span class="o">/</span><span class="n">datetime</span> <span class="err">字段</span><span class="p">,</span> <span class="err">进行精确的</span> <span class="err">月</span> <span class="err">匹配</span><span class="o">:</span>
<span class="n">day</span> <span class="err">对</span> <span class="n">date</span><span class="o">/</span><span class="n">datetime</span> <span class="err">字段</span><span class="p">,</span> <span class="err">进行精确的</span> <span class="err">日</span> <span class="err">匹配</span><span class="o">:</span>
<span class="n">isnull</span> <span class="n">True</span><span class="o">/</span><span class="n">False</span><span class="p">;</span> <span class="err">做</span> <span class="n">IF</span> <span class="nb">NULL</span><span class="o">/</span><span class="n">IF</span> <span class="n">NOT</span> <span class="nb">NULL</span> <span class="err">查询</span><span class="o">:</span> <span class="n">polls</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">expire_date__isnull</span><span class="o">=</span><span class="n">True</span><span class="p">).</span>
</pre></div>
<h6 id="exact">如果未提供查找类型, 系统就认为查找类型是 exact . 下面两个语句是等价的:<a class="headerlink" href="#exact" title="Permanent link">¶</a></h6>
<div class="highlight"><pre><span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">id</span><span class="o">=</span><span class="mi">14</span><span class="p">)</span>
<span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">id__exact</span><span class="o">=</span><span class="mi">14</span><span class="p">)</span>
</pre></div>
<h5 id="and">查询允许多个条件参数, 逗号分隔的多个条件参数会被 "AND" 起来使用:<a class="headerlink" href="#and" title="Permanent link">¶</a></h5>
<div class="highlight"><pre><span class="n">polls</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">pub_date__year</span><span class="o">=</span><span class="mi">2005</span><span class="p">,</span>
<span class="n">pub_date__month</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">question__startswith</span><span class="o">=</span><span class="s">"Would"</span><span class="p">,</span>
<span class="p">)</span>
</pre></div>
<p>得到2005年1月公布的带有一个"Would"开头的问题的所有民意测验.</p>
<h5 id="pk-primary_key__exact">为了使用更加方便, 还提供有一个 pk 查找类型, 可以翻译成 (primary_key)__exact.<a class="headerlink" href="#pk-primary_key__exact" title="Permanent link">¶</a></h5>
<p>在这个民意测试的例子里, 下面两个语句是等价的.:</p>
<div class="highlight"><pre><span class="n">polls</span><span class="p">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">id__exact</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="n">polls</span><span class="p">.</span><span class="n">get_object</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
</pre></div>
<h5 id="pk">pk 也可以通过连接进行查询.<a class="headerlink" href="#pk" title="Permanent link">¶</a></h5>
<p>在这个民意测试的例子里, 下面两个语句是等价的:</p>
<div class="highlight"><pre><span class="n">choices</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">poll__id__exact</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="n">choices</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">poll__pk</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
</pre></div>
<p>如果传递的关键字参数非法, 将引发 TypeError 异常.</p>
<h4 id="or">OR 查询<a class="headerlink" href="#or" title="Permanent link">¶</a></h4>
<p>关键字参数查询的各个条件都是 "AND" 关系. 如果你需要一个复杂的查询(举例来说,你需要一个 OR 语句), 你需要使用 Q 对象. <br />
Q 对象是 django.core.meta.Q 的实例, 用来装载一系列关键字参数. 这些关键字参数就象指定给 get() 和 filter() 函数的关键字参数一样. 举例来说:</p>
<div class="highlight"><pre><span class="n">Q</span><span class="p">(</span><span class="n">question__startswith</span><span class="o">=</span><span class="err">'</span><span class="n">What</span><span class="err">'</span><span class="p">)</span>
</pre></div>
<p>Q 对象可以使用 & 和 | 运算符进行组合. 当两个Q对象进行 & 或 | 运算时,会生成一个新的Q对象.举例来说语句:</p>
<div class="highlight"><pre><span class="n">Q</span><span class="p">(</span><span class="n">question__startswith</span><span class="o">=</span><span class="err">'</span><span class="n">Who</span><span class="err">'</span><span class="p">)</span> <span class="o">|</span> <span class="n">Q</span><span class="p">(</span><span class="n">question__startswith</span><span class="o">=</span><span class="err">'</span><span class="n">What</span><span class="err">'</span><span class="p">)</span>
</pre></div>
<p>生成一个新的 Q 对象表示这两个 "question__startswith" 查询条件的 "OR" 关系. 等同于下面的 SQL WHERE 子句:</p>
<div class="highlight"><pre> <span class="n">WHERE</span> <span class="n">question</span> <span class="n">LIKE</span> <span class="err">'</span><span class="n">Who</span><span class="o">%</span><span class="err">'</span> <span class="n">OR</span> <span class="n">question</span> <span class="n">LIKE</span> <span class="err">'</span><span class="n">What</span><span class="o">%</span><span class="err">'</span>
</pre></div>
<p>查询函数可以接受一个或多个 Q 对象作为参数.如果提供有多个 Q 对象参数, 它们将被 "AND" 到一起. 举例来说:</p>
<div class="highlight"><pre><span class="n">polls</span><span class="p">.</span><span class="n">get_object</span><span class="p">(</span>
<span class="n">Q</span><span class="p">(</span><span class="n">question__startswith</span><span class="o">=</span><span class="err">'</span><span class="n">Who</span><span class="err">'</span><span class="p">),</span>
<span class="n">Q</span><span class="p">(</span><span class="n">pub_date__exact</span><span class="o">=</span><span class="n">date</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> <span class="o">|</span> <span class="n">Q</span><span class="p">(</span><span class="n">pub_date__exact</span><span class="o">=</span><span class="n">date</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">))</span>
<span class="p">)</span>
</pre></div>
<p>翻译成 SQL 就是这样:</p>
<div class="highlight"><pre><span class="n">SELECT</span> <span class="o">*</span> <span class="n">from</span> <span class="n">polls</span> <span class="n">WHERE</span> <span class="n">question</span> <span class="n">LIKE</span> <span class="err">'</span><span class="n">Who</span><span class="o">%</span><span class="err">'</span>
<span class="n">AND</span> <span class="p">(</span><span class="n">pub_date</span> <span class="o">=</span> <span class="err">'</span><span class="mi">2005</span><span class="o">-</span><span class="mo">05</span><span class="o">-</span><span class="mo">02</span><span class="err">'</span> <span class="n">OR</span> <span class="n">pub_date</span> <span class="o">=</span> <span class="err">'</span><span class="mi">2005</span><span class="o">-</span><span class="mo">05</span><span class="o">-</span><span class="mo">06</span><span class="err">'</span><span class="p">)</span>
</pre></div>
<h3 id="_5">从结果集中取值<a class="headerlink" href="#_5" title="Permanent link">¶</a></h3>
<p>只有通过取值操作才能得到结果集包含的对象.取值操作可以通过迭代,切片,或其它专门的函数来实现. </p>
<h5 id="_6">一个结果集就是一个可迭代对象.<a class="headerlink" href="#_6" title="Permanent link">¶</a></h5>
<p>因此,可以通过一个循环来取出它的值:</p>
<div class="highlight"><pre><span class="k">for</span> <span class="n">p</span> <span class="n">in</span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">all</span><span class="p">()</span><span class="o">:</span>
<span class="n">print</span> <span class="n">p</span>
</pre></div>
<p>将使用 Poll 对象的 <strong>repr</strong>() 方法打印出所有的 Poll 对象.</p>
<h5 id="_7">一个结果集也可以被切片, 使用数组符号操作:<a class="headerlink" href="#_7" title="Permanent link">¶</a></h5>
<div class="highlight"><pre><span class="n">fifth_poll</span> <span class="o">=</span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">all</span><span class="p">()[</span><span class="mi">4</span><span class="p">]</span>
<span class="n">all_polls_but_the_first_two</span> <span class="o">=</span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">all</span><span class="p">()[</span><span class="mi">2</span><span class="o">:</span><span class="p">]</span>
<span class="n">every_second_poll</span> <span class="o">=</span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">all</span><span class="p">()[</span><span class="o">::</span><span class="mi">2</span><span class="p">]</span>
</pre></div>
<h6 id="-">结果集对象是惰性对象 - 也就是说,他们不是 真正的 包含他们表示对象的集合 (或列表).<a class="headerlink" href="#-" title="Permanent link">¶</a></h6>
<h6 id="python-django">Python 的协议魔法让结果集看起来是一个可迭代,可切片的对象. 事实上在幕后, Django 使用了缓存技术..<a class="headerlink" href="#python-django" title="Permanent link">¶</a></h6>
<p>如果你真的需要一个列表, 你可以强制对一个惰性对象取值:</p>
<div class="highlight"><pre><span class="n">querylist</span> <span class="o">=</span> <span class="n">list</span><span class="p">(</span><span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">all</span><span class="p">())</span>
</pre></div>
<p>不过,最好不要这么做,尤其当一个结果集相当大时. 由于 Django 要创建每一个对象的内存表示,这将占用相当大的内存.</p>
<h3 id="_8">结果集及其缓存行为<a class="headerlink" href="#_8" title="Permanent link">¶</a></h3>
<p>每个结果集都包含一个 cache. 对一个新创建的结果集来说, 缓存区是空的.当一个结果集第一次被取值, Django 会进行一次数据库查询,并将查询结果放入缓存中, 之后返回用户需要的数据. 后面的取值操作会使用缓存中的数据而不用再次访问数据库.</p>
<p>必须时刻记住:结果集具有缓存行为. 下面两行语句生成了两个临时的结果集,并进行了取值,之后舍弃:</p>
<div class="highlight"><pre><span class="n">print</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="n">in</span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">all</span><span class="p">()]</span> <span class="err">#</span> <span class="n">Evaluate</span> <span class="n">the</span> <span class="n">Query</span> <span class="n">Set</span>
<span class="n">print</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="n">in</span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">all</span><span class="p">()]</span> <span class="err">#</span> <span class="n">Evaluate</span> <span class="n">the</span> <span class="n">Query</span> <span class="n">Set</span> <span class="n">again</span>
</pre></div>
<p>对一个小型的,低流量的站点来说,这不会造成严重问题. <br />
不过,对一个高访问量的站点来说,它双倍增加了数据库服务器的负担. <br />
另外,由于在两次操作之间可能有其它的用户增加或删除了投票,因此这两次操作得到结果可能并不相同.</p>
<h5 id="_9">要避免这个问题, 保存这个结果集并在后面重用该结果集:<a class="headerlink" href="#_9" title="Permanent link">¶</a></h5>
<div class="highlight"><pre><span class="n">queryset</span> <span class="o">=</span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">all</span><span class="p">()</span>
<span class="n">print</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="n">in</span> <span class="n">queryset</span><span class="p">]</span> <span class="err">#</span> <span class="n">Evaluate</span> <span class="n">the</span> <span class="n">query</span> <span class="n">set</span>
<span class="n">print</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="n">in</span> <span class="n">queryset</span><span class="p">]</span> <span class="err">#</span> <span class="n">Re</span><span class="o">-</span><span class="n">use</span> <span class="n">the</span> <span class="n">cache</span> <span class="n">from</span> <span class="n">the</span> <span class="n">evaluation</span>
</pre></div>
<h3 id="_10">关系 (连接)<a class="headerlink" href="#_10" title="Permanent link">¶</a></h3>
<p>当你在 model 中定义了一个关系字段(也就是,一个ForeignKey, OneToOneField, 或 ManyToManyField).<br />
Django 使用关系字段的名字为 model 的每个实例添加一个 描述符. <br />
在访问对象或关联对象时, 这个描述符就象一个常规属性. <br />
举例来说, mychoice.poll 会返回 Choice 实例对象关联的 Poll 对象.</p>
<p>通过下面的关系,连接可以以非显式的方式进行: <br />
<code>choices.objects.filter(poll__slug="eggs")</code> <br />
得到一个 Choice 对象列表, 这些对象关联的 Poll 对象的 slug 字段值为 eggs. 允许多级连接. </p>
<p>通过一个对象实例的便利函数(convenience functions)就可直接查询该对象的关联对象. 举例来说, 如果 p 是一个 Poll 实例, p.choice_set() 将返回所有关联的 Choice 对象列表. 聪明的读者会注意到它等价于 choices.objects.filter(poll__id=p.id), 只是更加清晰.</p>
<h4 id="one-to-one-relations">One-to-one relations<a class="headerlink" href="#one-to-one-relations" title="Permanent link">¶</a></h4>
<h5 id="one-to-one-get_relatedobjectname">one-to-one 关系中的每个对象拥有一个 get_relatedobjectname() 方法.<a class="headerlink" href="#one-to-one-get_relatedobjectname" title="Permanent link">¶</a></h5>
<p>举例来说:</p>
<div class="highlight"><pre><span class="n">class</span> <span class="n">Place</span><span class="p">(</span><span class="n">meta</span><span class="p">.</span><span class="n">Model</span><span class="p">)</span><span class="o">:</span>
<span class="cp"># ...</span>
<span class="n">class</span> <span class="n">Restaurant</span><span class="p">(</span><span class="n">meta</span><span class="p">.</span><span class="n">Model</span><span class="p">)</span><span class="o">:</span>
<span class="cp"># ...</span>
<span class="n">the_place</span> <span class="o">=</span> <span class="n">meta</span><span class="p">.</span><span class="n">OneToOneField</span><span class="p">(</span><span class="n">places</span><span class="p">.</span><span class="n">Place</span><span class="p">)</span>
</pre></div>
<p>在上面的例子里, 每个 Place 会自动拥有一个 get_restaurant() 方法, <br />
且每个 Restaurant 会自动拥有一个 get_the_place() 方法.</p>
<h4 id="many-to-one-relations">Many-to-one relations<a class="headerlink" href="#many-to-one-relations" title="Permanent link">¶</a></h4>
<p>在 many-to-one 关系中, 关联对象(Many)会自动拥有一个 get_relatedobject() 方法. <br />
被关联的对象(one)会自动拥有 get_relatedobject(), get_relatedobject_list(), 和 get_relatedobject_count() 方法 (功能与模块级的 get_object(), filter(), 和 get_count() 相同).</p>
<p>在上面的民意测试例子里, 一个 Poll 对象 p 自动拥有下列方法:</p>
<div class="highlight"><pre><span class="n">p</span><span class="p">.</span><span class="n">get_choice</span><span class="p">()</span>
<span class="n">p</span><span class="p">.</span><span class="n">get_choice_list</span><span class="p">()</span>
<span class="n">p</span><span class="p">.</span><span class="n">get_choice_count</span><span class="p">()</span>
</pre></div>
<p>Choice 对象 c 则自动拥有下面的方法:
<code>c.get_poll()</code> </p>
<h4 id="many-to-many">Many-to-many 关系<a class="headerlink" href="#many-to-many" title="Permanent link">¶</a></h4>
<p>Many-to-many 关系类似<code>Many-to-one relations</code>_, 它生成同样的方法集.例外的是关联对象的 get_relatedobject_list() 方法返回一个实例的列表而不是一个仅一个实例.因此,若 Poll 和 Choice 是 many-to-many 关系, choice.get_poll_list() 将返回一个列表. </p>
<h5 id="_11">专门的结果集<a class="headerlink" href="#_11" title="Permanent link">¶</a></h5>
<p>除 filter 和 exclude() 之外, Django 提供了一系列结果集处理方法, 修改结果的类型, 或修改 sql 查询在数据库执行的方式.</p>
<div class="highlight"><pre><span class="n">order_by</span><span class="p">(</span><span class="o">*</span><span class="n">fields</span><span class="p">)</span>
</pre></div>
<p>根据 model 中提供 ordering tuple, 结果集会被自动排序. 不过, 排序也可以通过 order_by 方法显式的进行:</p>
<div class="highlight"><pre><span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">filter</span><span class="p">(</span><span class="n">pub_date__year</span><span class="o">=</span><span class="mi">2005</span><span class="p">,</span>
<span class="n">pub_date__month</span><span class="o">=</span><span class="mi">1</span><span class="p">).</span><span class="n">order_by</span><span class="p">(</span><span class="err">'</span><span class="o">-</span><span class="n">pub_date</span><span class="err">'</span><span class="p">,</span> <span class="err">'</span><span class="n">question</span><span class="err">'</span><span class="p">)</span>
</pre></div>
<p>结果集将按降序排列 pub_date, 然后按升序排列 question."-pub_date" 中的负号表示降序(递减).要取随机序,使用"?", 象下面这样:</p>
<div class="highlight"><pre><span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">order_by</span><span class="o">=</span><span class="p">(</span><span class="sc">'?'</span><span class="p">)</span>
</pre></div>
<p>要按另一个表中的字段排序, 添加另一个表的名字和一个句点,象下面这样:</p>
<div class="highlight"><pre><span class="n">Choice</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">order_by</span><span class="o">=</span><span class="p">(</span><span class="err">'</span><span class="n">Poll</span><span class="p">.</span><span class="n">pub_date</span><span class="err">'</span><span class="p">,</span> <span class="err">'</span><span class="n">choice</span><span class="err">'</span><span class="p">)</span>
</pre></div>
<h3 id="valuesfields">values(*fields)<a class="headerlink" href="#valuesfields" title="Permanent link">¶</a></h3>
<p>类似 filter(), 不过它返回一个字典的列表而不是 model 实例对象的列表. </p>
<p>它接受一个可选参数: fields, 这是一个字段名列表或tuple.如果你没有指定 fields, 每个字段都会返回. <br />
否则就只返回你指定的字段名和值.这里有一个例子,使用上面定义的 Poll model</p>
<div class="highlight"><pre><span class="o">>>></span> <span class="n">from</span> <span class="n">datetime</span> <span class="n">import</span> <span class="n">datetime</span>
<span class="o">>>></span> <span class="n">p1</span> <span class="o">=</span> <span class="n">Poll</span><span class="p">(</span><span class="n">slug</span><span class="o">=</span><span class="err">'</span><span class="n">whatsup</span><span class="err">'</span><span class="p">,</span> <span class="n">question</span><span class="o">=</span><span class="s">"What's up?"</span><span class="p">,</span>
<span class="p">...</span> <span class="n">pub_date</span><span class="o">=</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">20</span><span class="p">),</span> <span class="n">expire_date</span><span class="o">=</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">20</span><span class="p">))</span>
<span class="o">>>></span> <span class="n">p1</span><span class="p">.</span><span class="n">save</span><span class="p">()</span>
<span class="o">>>></span> <span class="n">p2</span> <span class="o">=</span> <span class="n">Poll</span><span class="p">(</span><span class="n">slug</span><span class="o">=</span><span class="err">'</span><span class="n">name</span><span class="err">'</span><span class="p">,</span> <span class="n">question</span><span class="o">=</span><span class="s">"What's your name?"</span><span class="p">,</span>
<span class="p">...</span> <span class="n">pub_date</span><span class="o">=</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">20</span><span class="p">),</span> <span class="n">expire_date</span><span class="o">=</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">20</span><span class="p">))</span>
<span class="o">>>></span> <span class="n">p2</span><span class="p">.</span><span class="n">save</span><span class="p">()</span>
<span class="o">>>></span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">all</span><span class="p">()</span>
<span class="p">[</span><span class="n">What</span><span class="err">'</span><span class="n">s</span> <span class="n">up</span><span class="o">?</span><span class="p">,</span> <span class="n">What</span><span class="err">'</span><span class="n">s</span> <span class="n">your</span> <span class="n">name</span><span class="o">?</span><span class="p">]</span>
<span class="o">>>></span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">values</span><span class="p">()</span>
<span class="p">[{</span><span class="err">'</span><span class="n">id</span><span class="err">'</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="err">'</span><span class="n">slug</span><span class="err">'</span><span class="o">:</span> <span class="err">'</span><span class="n">whatsup</span><span class="err">'</span><span class="p">,</span> <span class="err">'</span><span class="n">question</span><span class="err">'</span><span class="o">:</span> <span class="s">"What's up?"</span><span class="p">,</span> <span class="err">'</span><span class="n">pub_date</span><span class="err">'</span><span class="o">:</span> <span class="n">datetime</span><span class="p">.</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">20</span><span class="p">),</span> <span class="err">'</span><span class="n">expire_date</span><span class="err">'</span><span class="o">:</span> <span class="n">datetime</span><span class="p">.</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">20</span><span class="p">)},</span>
<span class="p">{</span><span class="err">'</span><span class="n">id</span><span class="err">'</span><span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="err">'</span><span class="n">slug</span><span class="err">'</span><span class="o">:</span> <span class="err">'</span><span class="n">name</span><span class="err">'</span><span class="p">,</span> <span class="err">'</span><span class="n">question</span><span class="err">'</span><span class="o">:</span> <span class="s">"What's your name?"</span><span class="p">,</span> <span class="err">'</span><span class="n">pub_date</span><span class="err">'</span><span class="o">:</span> <span class="n">datetime</span><span class="p">.</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">20</span><span class="p">),</span> <span class="err">'</span><span class="n">expire_date</span><span class="err">'</span><span class="o">:</span> <span class="n">datetime</span><span class="p">.</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2005</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">20</span><span class="p">)}]</span>
<span class="o">>>></span> <span class="n">Poll</span><span class="p">.</span><span class="n">objects</span><span class="p">.</span><span class="n">values</span><span class="p">(</span><span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="err">'</span><span class="n">id</span><span class="err">'</span><span class="p">,</span> <span class="err">'</span><span class="n">slug</span><span class="err">'</span><span class="p">])</span>
<span class="p">[{</span><span class="err">'</span><span class="n">id</span><span class="err">'</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="err">'</span><span class="n">slug</span><span class="err">'</span><span class="o">:</span> <span class="err">'</span><span class="n">whatsup</span><span class="err">'</span><span class="p">},</span> <span class="p">{</span><span class="err">'</span><span class="n">id</span><span class="err">'</span><span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="err">'</span><span class="n">slug</span><span class="err">'</span><span class="o">:</span> <span class="err">'</span><span class="n">name</span><span class="err">'</span><span class="p">}]</span>
</pre></div>
<h4 id="model-values">当你知道你要取得哪些字段的值时并且你不需要那些 model实例对象的功能时,使用 values() 函数.<a class="headerlink" href="#model-values" title="Permanent link">¶</a></h4>
<aside>
<hr/>
<nav>
<ul class="articles_timeline">
<li class="previous_article">« <a href="http://wbowam.github.io/related-field-has-invalid-lookup-icontains-jie-jue-fang-fa.html" title="Previous: related Field has invalid lookup: icontains 解决方法">related Field has invalid lookup: icontains 解决方法</a></li>
<li class="next_article"><a href="http://wbowam.github.io/django-validators.html" title="Next: Django Validators">Django Validators</a> »</li>
</ul>
</nav>
</aside>
<!-- Duoshuo Comment BEGIN -->
<div class="ds-thread" data-author-key="4433755"></div>
<script type="text/javascript">
var duoshuoQuery = {short_name:"tlbog"};
(function() {
var ds = document.createElement('script');
ds.type = 'text/javascript';ds.async = true;
ds.src = 'http://static.duoshuo.com/embed.js';
ds.charset = 'UTF-8';
(document.getElementsByTagName('head')[0]
|| document.getElementsByTagName('body')[0]).appendChild(ds);
})();
</script>
<!-- Duoshuo Comment END -->
</div>
<section>
<div class="span2" style="float:right;font-size:0.9em;">
<h4>Published</h4>
<time pubdate="pubdate" datetime="2014-09-07T00:00:00+08:00">Sep 7, 2014</time>
<h4>Category</h4>
<a class="category-link" href="/categories.html#It-ref">It</a>
<h4>Tags</h4>
<ul class="list-of-tags tags-in-article">
<li><a href="/tags.html#Django-ref">Django
<span>23</span>
</a></li>
</ul>
</div>
</section>
</div>
</article>
</div>
<div class="span1"></div>
</div>
</div>
</div>
<footer>
<div id="footer">
<ul class="footer-content">
<li class="elegant-power">Powered by <a href="http://getpelican.com/" title="Pelican Home Page">Pelican</a>. Theme: <a href="http://oncrashreboot.com/pelican-elegant" title="Theme Elegant Home Page">Elegant</a> by <a href="http://oncrashreboot.com" title="Talha Mansoor Home Page">Talha Mansoor</a></li>
</ul>
</div>
</footer> <script src="http://code.jquery.com/jquery.min.js"></script>
<script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
<script>
function validateForm(query)
{
return (query.length > 0);
}
</script>
</body>
</html>