擅长:python、mysql、java
<p>不能这样做的原因是<code>__unicode__</code>在Python中使用queryset的SQL选择的数据进行计算。你知道吗</p>
<p>因此,数据库无法预测Python方法<code>__unicode__</code>生成的值。你知道吗</p>
<p>也就是说,有很多方法:</p>
<ol>
<li><p>如果依赖于<a href="http://haystacksearch.org/" rel="nofollow">django-haystack</a>进行搜索,那么可以将<code>{{ object }}</code>作为<code>object.__unicode__</code>的结果放入模型类的模板中。然后,可以通过<code>__unicode__</code>输出启用搜索。</p></li>
<li><p>在模型中添加一个缓存的unicode字符域,使用<a href="https://docs.djangoproject.com/en/dev/ref/signals/#pre-save" rel="nofollow">pre_save signal receiver</a>(覆盖<a href="https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-predefined-model-methods" rel="nofollow">save() method</a>)来更新self.u unicode,则可以筛选(缓存的\u unicode='Foo Bar')</p></li>
<li><p>使用<a href="http://www.1keydata.com/sql/sql-concatenate.html" rel="nofollow">SQL CONTACT</a>(作者姓名, ' ', 作者姓氏)='Foo Bar'带<a href="https://docs.djangoproject.com/en/dev/topics/db/sql/#performing-raw-queries" rel="nofollow">Author.objects.raw()</a>或带<a href="https://docs.djangoproject.com/en/dev/ref/models/querysets/#extra" rel="nofollow">author_queryset.extra()</a></p></li>
</ol>