0

私はすべてを混ぜ合わせようとしていますが、正しい答えが見つからないようです.

クエリでフィルターを使用しようとしています。ただし、結果は次のとおりです。 の場合q!=None、フィルターが生成されます。ただし、q==None使用後にデータが表示されない場合run()

q = self.request.get('q')
if q!=None:
  custQuery = db.Query(Customer)
  custQuery.filter('license = ',q)
elif q==None:
  custQuery = Customer.all()

しかし、それらすべてを以下のコードだけに置き換えると、すべてのデータが表示されます。

custQuery = db.Query(Customer)

if-else ステートメントに q/query がない場合、データを表示するにはどうすればよいですか?

4

2 に答える 2

1

わかった!

リクエストを受け取ったときの結果は次のとおりです。の場合、query is ''「空白あり」と表示されます。の場合、query!=None「クエリあり」と表示されます。ただし、の場合query is None、これは表示されません。これは、aq / queryを要求しているという事実は、常にq/queryが空白であることを意味するためです。

if q is None:
  a = "without query"
  #custQuery = Customer.all()
elif q is '':
  a = "with blank"
elif q!=None:
  a = "with query"

したがって、問題を解決するために、データを受け取ったら、次のことを宣言しますquery is None。このような:

q = self.request.get('q')
if q is '':
  custQuery = db.Query(Customer)
elif q is None:
  q = '' #Force it! (Previously: q is '' - and it works.)
  custQuery = db.Query(Customer)
elif q!=None:
  custQuery = db.Query(Customer)
  custQuery.filter('license = ',q)

解決策:強制的に「空白」にします。すべてのデータは、クエリが「空白」の場合にのみ表示されます。

于 2013-01-04T00:49:07.927 に答える
1

を使用する場合、存在しないself.request.get('q')場合のデフォルト値は None です。'q'簡単な辞書でこれをテストできます。

>>> d = {'q': 'message'}
>>> print d.get('q')
'message'
>>> d = {'a': 'no q here'}
>>> print d.get('q')
None

したがって、「q」がリクエスト ディクショナリにあるかどうかを確認する場合は、None ( if q is None:) と比較する必要があります。

クエリが空白かどうかを比較する場合は、いくつかのことを行うことができます。

>>> query = ''
>>> print query is None
False
>>> print query == ''
True
>>> print len(query) > 0
False
>>> print bool(query) 
False

>>> query = 'valid'
>>> print query is None
False
>>> print query == ''
False
>>> print len(query) > 0
True
>>> print bool(query)
True

を使用repr()して、実際の結果を確認できます: (この場合は空の文字列)

>>> print repr(d.get('q', ''))
''

したがって、self.request.get('q')デフォルトは '' なので、次のようにします。

q = self.request.get('q')

if q is '': # Blank or non-existent
  custQuery = Customer.all()

else: # Non-blank
  custQuery = db.Query(Customer)
于 2013-01-04T07:45:32.107 に答える