0

以下は、予約モデルから予約情報を取得しようとしている Python コードです。

    i=0
    for c in courts:
        court = names[i]
        i=i+1
        c_key=c.key()
        logging.info("c_key: %s " % c_key)
        weekday_key= db.Key.from_path('Courts', 'c_key', 'Days', weekday)
        logging.info("weekday_key: %s " % weekday_key)
        logging.info("weekday: %s " % weekday)
        logging.info("court: %s " % court)
        reservation = db.Query(Reservations)
        nlimit=2*len(times)
        reservations = reservation.fetch(limit=nlimit)
        logging.info("reservations: %s " % len(reservations))

Courts データベースには、court1 と court2 の 2 つの裁判所エンティティしかありません。また、私の Days データベースには、Sunday、...、Saturday という名前の、court1 に 7 つ、 court2 に 7 つの 14 の平日エンティティしかありません。現在の例では、2 つの月曜日の日のキーを取得しようとしています。1 つは court1 用で、もう 1 つは court2 用です。以下のログによると、鍵自体weekday_keyが異なる 2 つの異なる裁判所で同じ結果が得られる理由がわかりません。c_key

以下のログでは、db.Key.from_path(コマンド 'c_key' と 'court' のどちらを入力してもまったく同じ結果が得られます。これは、2 つweekday_keyの値が同一であり、予想したほど異なっていないことを示しています。

INFO     2012-09-10 21:25:19,189 views.py:226] c_key: ag1kZXZ-c2NoZWR1bGVycicLEglMb2NhdGlvbnMiBlJvZ2VycwwLEgZDb3VydHMiBmNvdXJ0MQw 
INFO     2012-09-10 21:25:19,189 views.py:228] weekday_key: ag1kZXZ-c2NoZWR1bGVyciELEgZDb3VydHMiBWNfa2V5DAsSBERheXMiBk1vbmRheQw 
INFO     2012-09-10 21:25:19,189 views.py:229] weekday: Monday 
INFO     2012-09-10 21:25:19,189 views.py:230] court: court1 
INFO     2012-09-10 21:25:19,192 views.py:235] reservations: 1 
INFO     2012-09-10 21:25:19,192 views.py:226] c_key: ag1kZXZ-c2NoZWR1bGVycicLEglMb2NhdGlvbnMiBlJvZ2VycwwLEgZDb3VydHMiBmNvdXJ0Mgw 
INFO     2012-09-10 21:25:19,192 views.py:228] weekday_key: ag1kZXZ-c2NoZWR1bGVyciELEgZDb3VydHMiBWNfa2V5DAsSBERheXMiBk1vbmRheQw 
INFO     2012-09-10 21:25:19,192 views.py:229] weekday: Monday 
INFO     2012-09-10 21:25:19,192 views.py:230] court: court2 
INFO     2012-09-10 21:25:19,195 views.py:235] reservations: 1 

私のモデルは次のとおりです。

class Courts(db.Model):    #parent is Locations, courtname is key_name
    location = db.ReferenceProperty(Locations)
    timezone = db.StringProperty()

class Days (db.Model):    #parent is Courts, name is key_name, day of week
    court = db.ReferenceProperty(Courts)
    startTime = db.ListProperty(int)
    endTime = db.ListProperty(int)

class Reservations(db.Model):    #parent is Days, hour, minute HH:MM is key_name
    weekday = db.ReferenceProperty(Days)
    day = db.IntegerProperty()
    nowweekday = db.IntegerProperty()
    name = db.StringProperty()
    hour = db.IntegerProperty()
    minute = db.IntegerProperty()
4

3 に答える 3

1
    i=0
    for c in courts:
        court_id = names[i]
        i=i+1
        weekday_key = db.Key.from_path('Courts', c.key().name(), 'Days', weekday)
        reservation=Reservations.all()
        reservation.ancestor(weekday_key)
        nlimit=2*len(times)
        reservations = reservation.fetch(limit=nlimit)

この答えについて私が気に入らないのは、それweekday_keyは法廷のすべてのcについて同じであるということです。それは正しくないようです。

于 2012-09-11T04:10:16.487 に答える
1

variable の値ではなく、毎回文字列 を使用してキーを計算しています。'c_key'c_key

ただし、これを修正しても、完全なキーパスではなく裁判所の ID が必要なため、機能しません。

于 2012-09-10T22:17:54.040 に答える
1

(week)Days の特定の平日に Courts の特定の裁判所で Days の特定の日にすべての予約のクエリを作成するにはどうすればよいですか?

キーの値を知っているので、(いわば) 手でキーを作成し、そのキーを祖先としてクエリを作成します。

たとえば、次のようになります。

key = ndb.Key(BlogPost, 12345)
qry = Comment.query(ancestor=key)

しかし、ここでは次のようなものを使用します

key = ndb.key(Locations, "Place1", Courts, "Name_Of_Court") 
result = Reservations.query(ancestor=key)

など、あなたはチェーンをたどり、あなたが持っているすべての情報 (つまり、彼らが予約したいコート) を使ってキーを構築しています。次に、祖先クエリの結果は、祖先として渡したキーを持つモデルになります。

https://developers.google.com/appengine/docs/python/ndb/queries#ancestor

于 2012-09-11T12:50:30.723 に答える