ListPropertyでチクショウ
ListPropertyで要素を持たないデータを取得ってできないのかな・・・
こういうモデルがあったとする。
- models.py
# -*- coding: utf-8 -*- from django.utils.translation import ugettext_lazy as _ from google.appengine.ext import db class Memo(db.Model): label = db.StringListProperty() number = db.ListProperty()
入ってるデータが以下の状態だったとする
- views.py
data = Memo.all() for value in data : print value # 結果 # Memo(key_id=5L, label=[u'aa', u'bb', u'cc'], number=[1L, 2L, 3L, 4L]) # Memo(key_id=6L, label=[], number=[1L, 2L, 3L, 4L]) # Memo(key_id=7L, label=[u'aa', u'bb', u'cc'], number=[]) # Memo(key_id=8L, label=[], number=[])
さて実験
data = Memo.all().filter('label = ', 'aa') # 結果 # Memo(key_id=5L, label=[u'aa', u'bb', u'cc'], number=[1L, 2L, 3L, 4L]) # Memo(key_id=7L, label=[u'aa', u'bb', u'cc'], number=[]) data = Memo.all().filter('number = ', 2) # 結果 # Memo(key_id=5L, label=[u'aa', u'bb', u'cc'], number=[1L, 2L, 3L, 4L]) # Memo(key_id=6L, label=[], number=[1L, 2L, 3L, 4L]) data = Memo.all().filter('label > ', None) # 結果 # Memo(key_id=5L, label=[u'aa', u'bb', u'cc'], number=[1L, 2L, 3L, 4L]) # Memo(key_id=7L, label=[u'aa', u'bb', u'cc'], number=[]) data = Memo.all().filter('number > ', None) # 結果 # Memo(key_id=5L, label=[u'aa', u'bb', u'cc'], number=[1L, 2L, 3L, 4L]) # Memo(key_id=6L, label=[], number=[1L, 2L, 3L, 4L]) data = Memo.all().filter('label =', None) # 結果 : 無し data = Memo.all().filter('number = ', None) # 結果 : 無し
というわけで、そもそも要素が無いものはフィルター通らないぽい。「filter('label > ', None)」これが通用したもんだから「filter('label = ', None)」が良きに計らってくれるかもと期待してしまった。
ListPropertyはNone型を格納できないみたいだし、じゃあ空状態はどうなってるのかと見てみると「[]」状態だったし。
結局、値が格納されているかを判断するフラグを持つようにしました。
ううう・・・ちくしょう・・・