/usr/share/doc/libqdjango-doc/html/queries.html is in libqdjango-doc 0.6.2-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>QDjango: Making queries</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">QDjango
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Making queries </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>The <a class="el" href="classQDjango.html" title="The QDjango class provides a set of static functions. ">QDjango</a> object relational mapper (ORM) supports the concept of querysets, borrowed from django's ORM.</p>
<p>A queryset is a collection of database objects which match a certain number of user-specified conditions.</p>
<p>You can learn more about querysets by reading the <a class="el" href="classQDjangoQuerySet.html" title="The QDjangoQuerySet class is a template class for performing database queries. ">QDjangoQuerySet</a> template class documentation.</p>
<h1><a class="anchor" id="creating-queries"></a>
Creating and filtering querysets</h1>
<p>Before you can start using querysets, you need to declare your database models as described in <a class="el" href="models.html">Database models</a>.</p>
<p>The most basic queryset matches all the objects for a given model.</p>
<div class="fragment"><div class="line"><span class="comment">// all users</span></div><div class="line"><a class="code" href="classQDjangoQuerySet.html">QDjangoQuerySet<User></a> users;</div></div><!-- fragment --><p>You can use the <a class="el" href="classQDjangoQuerySet.html#a5fc458cda1b34cad3d9f4f99224feae6">QDjangoQuerySet::filter()</a> and <a class="el" href="classQDjangoQuerySet.html#af27220e6645f081348c99ff55a5d5ed6">QDjangoQuerySet::exclude()</a> methods to add filtering conditions to a querset:</p>
<div class="fragment"><div class="line"><span class="comment">// find all users whose password is "foo" and whose username is not "bar"</span></div><div class="line"><a class="code" href="classQDjangoQuerySet.html">QDjangoQuerySet<User></a> someUsers;</div><div class="line">someUsers = users.<a class="code" href="classQDjangoQuerySet.html#a5fc458cda1b34cad3d9f4f99224feae6">filter</a>(<a class="code" href="classQDjangoWhere.html">QDjangoWhere</a>(<span class="stringliteral">"password"</span>, <a class="code" href="classQDjangoWhere.html#acd1b7a7d3e2367c6f4846dd9f0ebbd61a9d451d54374a65cedb32f6bb15766eaa">QDjangoWhere::Equals</a>, <span class="stringliteral">"foo"</span>) &&</div><div class="line"> <a class="code" href="classQDjangoWhere.html">QDjangoWhere</a>(<span class="stringliteral">"username"</span>, <a class="code" href="classQDjangoWhere.html#acd1b7a7d3e2367c6f4846dd9f0ebbd61a6b4aed21b09dd7e3bd287af02da0812d">QDjangoWhere::NotEquals</a>, <span class="stringliteral">"bar"</span>));</div><div class="line"></div><div class="line"><span class="comment">// find all users whose username is "foo" or "bar"</span></div><div class="line">someUsers = users.<a class="code" href="classQDjangoQuerySet.html#a5fc458cda1b34cad3d9f4f99224feae6">filter</a>(<a class="code" href="classQDjangoWhere.html">QDjangoWhere</a>(<span class="stringliteral">"username"</span>, <a class="code" href="classQDjangoWhere.html#acd1b7a7d3e2367c6f4846dd9f0ebbd61a9d451d54374a65cedb32f6bb15766eaa">QDjangoWhere::Equals</a>, <span class="stringliteral">"foo"</span>) ||</div><div class="line"> <a class="code" href="classQDjangoWhere.html">QDjangoWhere</a>(<span class="stringliteral">"username"</span>, <a class="code" href="classQDjangoWhere.html#acd1b7a7d3e2367c6f4846dd9f0ebbd61a9d451d54374a65cedb32f6bb15766eaa">QDjangoWhere::Equals</a>, <span class="stringliteral">"bar"</span>));</div><div class="line"></div><div class="line"><span class="comment">// find all users whose username starts with "f":</span></div><div class="line">someUsers = users.<a class="code" href="classQDjangoQuerySet.html#a5fc458cda1b34cad3d9f4f99224feae6">filter</a>(<a class="code" href="classQDjangoWhere.html">QDjangoWhere</a>(<span class="stringliteral">"username"</span>, <a class="code" href="classQDjangoWhere.html#acd1b7a7d3e2367c6f4846dd9f0ebbd61a1c1dfd01f182420c566b374fbe384ee5">QDjangoWhere::StartsWith</a>, <span class="stringliteral">"f"</span>));</div></div><!-- fragment --><p>You can also use the <a class="el" href="classQDjangoQuerySet.html#af353175373ce8a2087ed42840be58f4c">QDjangoQuerySet::limit()</a> method to limit the number of returned rows:</p>
<div class="fragment"><div class="line"><span class="comment">// limit number of results</span></div><div class="line">someUsers = users.<a class="code" href="classQDjangoQuerySet.html#af353175373ce8a2087ed42840be58f4c">limit</a>(0, 100);</div></div><!-- fragment --><h1><a class="anchor" id="iterating-queries"></a>
Iterating over results</h1>
<p>The easiest way to iterate over results is to use Qt's <a href="http://doc.qt.io/qt-5/containers.html#the-foreach-keyword">foreach</a> keyword:</p>
<div class="fragment"><div class="line"><span class="comment">// iterate over matching users</span></div><div class="line"><span class="keywordflow">foreach</span> (<span class="keyword">const</span> User &user, someUsers) {</div><div class="line"> qDebug() << <span class="stringliteral">"found user"</span> << user.username; </div><div class="line">}</div></div><!-- fragment --><p>Another way of iterating over results is to run over model instances using the <a class="el" href="classQDjangoQuerySet.html#a90a5cd47b75e0cee952461ab574b3f46">QDjangoQuerySet::size()</a> and <a class="el" href="classQDjangoQuerySet.html#a1bcfbffb6676f4ec19f9278c3f0adf4f">QDjangoQuerySet::at()</a> methods:</p>
<div class="fragment"><div class="line"><span class="comment">// iterate over matching users</span></div><div class="line">User user;</div><div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < someUsers.<a class="code" href="classQDjangoQuerySet.html#a90a5cd47b75e0cee952461ab574b3f46">size</a>(); ++i) {</div><div class="line"> <span class="keywordflow">if</span> (someUsers.<a class="code" href="classQDjangoQuerySet.html#a1bcfbffb6676f4ec19f9278c3f0adf4f">at</a>(i, &user)) {</div><div class="line"> qDebug() << <span class="stringliteral">"found user"</span> << user.username; </div><div class="line"> }</div><div class="line">}</div></div><!-- fragment --><p>It is also possible to retrieve field data without creating model instances using the <a class="el" href="classQDjangoQuerySet.html#a9e558d61d83f171a3e627295d544ccb1">QDjangoQuerySet::values()</a> and <a class="el" href="classQDjangoQuerySet.html#a7125a4bf5e722c8af322c1b6e4be05b0">QDjangoQuerySet::valuesList()</a> methods:</p>
<div class="fragment"><div class="line"><span class="comment">// retrieve usernames and passwords for matching users as maps</span></div><div class="line">QList<QVariantMap> propertyMaps = someUsers.<a class="code" href="classQDjangoQuerySet.html#a9e558d61d83f171a3e627295d544ccb1">values</a>(QStringList() << <span class="stringliteral">"username"</span> << <span class="stringliteral">"password"</span>);</div><div class="line"><span class="keywordflow">foreach</span> (<span class="keyword">const</span> QVariantMap &propertyMap, propertyMaps) {</div><div class="line"> qDebug() << <span class="stringliteral">"username"</span> << propertyList[<span class="stringliteral">"username"</span>];</div><div class="line"> qDebug() << <span class="stringliteral">"password"</span> << propertyList[<span class="stringliteral">"password"</span>];</div><div class="line">}</div><div class="line"></div><div class="line"><span class="comment">// retrieve usernames and passwords for matching users as lists</span></div><div class="line">QList<QVariantList> propertyLists = someUsers.<a class="code" href="classQDjangoQuerySet.html#a7125a4bf5e722c8af322c1b6e4be05b0">valuesList</a>(QStringList() << <span class="stringliteral">"username"</span> << <span class="stringliteral">"password"</span>);</div><div class="line"><span class="keywordflow">foreach</span> (<span class="keyword">const</span> QVariantList &propertyList, propertyLists) {</div><div class="line"> qDebug() << <span class="stringliteral">"username"</span> << propertyList[0];</div><div class="line"> qDebug() << <span class="stringliteral">"password"</span> << propertyList[1];</div><div class="line">}</div></div><!-- fragment --><h1><a class="anchor" id="other-queries"></a>
Other operations</h1>
<div class="fragment"><div class="line"><span class="comment">// count matching users without retrieving their data</span></div><div class="line"><span class="keywordtype">int</span> numberOfUsers = someUsers.<a class="code" href="classQDjangoQuerySet.html#a90bfd4aecf07372b2d68c56b345e12a8">count</a>();</div><div class="line"></div><div class="line"><span class="comment">// delete all the users in the queryset</span></div><div class="line">someUsers.<a class="code" href="classQDjangoQuerySet.html#ad174f57f5b4091aeba43482ac3b0635f">remove</a>();</div></div><!-- fragment --> </div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>
|