<p>永远不要捕获基类<code>Exception</code>,除非您正确地处理它(即记录错误消息等)。为什么?因为<code>except</code>子句隐藏了代码中真正的问题,使调试成为一个巨大的麻烦</p>
<p><code>request.POST</code>对象只包含普通字符串。虽然<code>fld_birth_date</code>可能是日期格式的字符串,但不能用字符串对象过滤<code>DateField</code>。您需要一个实际的<code>date</code>对象来过滤。你知道吗</p>
<p>您需要做的是将字符串转换为日期对象。例如,如果您的日期总是遵循<code>dd-mm-YYYY</code>格式,您可以:</p>
<pre><code>import datetime
date = datetime.datetime.strftime(request.POST.get('fld_birth_date'), '%d-%m-%Y').date()
</code></pre>
<p>除此之外,还可以使用<code>if q_name</code>和<code>if q_birth_date</code>,但两者都没有定义,都会引发另一个异常。你知道吗</p>
<p>代码的<code>if request.method == 'POST'</code>部分可能如下所示:</p>
<pre><code>if request.method == 'POST':
name = request.POST.get('fld_name', None)
birth_date_string = request.POST.get('fld_birth_date', '')
try:
birth_date = datetime.datetime.strftime(birth_date_string, '%d-%m-%Y').date()
except ValueError:
birth_date = None
search_results = UserProfile.objects.all()
if name:
search_results = search_results.filter(name__icontains=name.strip())
if birth_date:
search_results = search_results.filter(birth_date=birth_date)
</code></pre>
<p>或者如果您希望在姓名或出生日期匹配时得到结果:</p>
<pre><code>from django.db.models import Q
q = Q()
if name:
q |= Q(name__icontains=name.strip())
if birth_date:
q |= Q(birth_date=birth_date)
search_results = UserProfile.objects.filter(q)
</code></pre>