1

同じ構造型のインスタンスをその中に格納したいという点で「再帰的」なndbを使用して、GAEでデータ構造をモデル化しました。概念的には、

class Person(ndb.Model):
    name = ndb.StringProperty()
    friend = ndb.StructuredProperty(Person)

次のエラーが表示されます。

Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 239, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 298, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 84, in LoadObject
    obj = __import__(path[0])
  File "C:\Users\Rusty\Documents\GitHub\AutoAddDrop\autoadddrop.py", line 2, in <module>
    import models
  File "C:\Users\Rusty\Documents\GitHub\AutoAddDrop\models.py", line 100, in <module>
    class Bid(ndb.Model):
  File "C:\Users\Rusty\Documents\GitHub\AutoAddDrop\models.py", line 123, in Bid
    outbid_by = ndb.StructuredProperty(Bid) #Winning Bid
NameError: name 'Bid' is not defined

のクラスは次のmodels.pyとおりです。

class Bid(ndb.Model):
    user_id = ndb.StringProperty()
    league_id = ndb.StringProperty()
    sport = ndb.StringProperty()
    bid_amount = ndb.IntegerProperty()
    timestamp = ndb.DateTimeProperty()
    status = ndb.StringProperty()
    target_player_id = ndb.StringProperty()
    target_player_name = ndb.StringProperty()
    target_player_team = ndb.StringProperty()
    target_player_position = ndb.StringProperty()
    add_player_id = ndb.StringProperty()
    add_player_name = ndb.StringProperty()
    add_player_team = ndb.StringProperty()
    add_player_position = ndb.StringProperty()
    drop_player_id = ndb.StringProperty()
    drop_player_name = ndb.StringProperty()
    drop_player_team = ndb.StringProperty()
    drop_player_position = ndb.StringProperty()
    bid_type = ndb.StringProperty()
    bid_direction = ndb.StringProperty()
    target_value = ndb.FloatProperty()
    transaction_timestamp = ndb.DateTimeProperty()
    outbid_by = ndb.StructuredProperty(Bid) #Winning Bid
    outbid_by_key = ndb.KeyProperty(Bid)  #key of winning bid
    cbs_add_transaction = ndb.JsonProperty()
    transaction_reason = ndb.StringProperty()
4

1 に答える 1

4

このエラーは、クラス本体の実行時に Bid クラス オブジェクトがまだ作成されていないために発生します。

モデル クラスに同じクラスの部分構造を含めることはできません。無限の空間ができてしまいます。StructuredPropertyには、現在のモデルに別のモデルのフィールドが物理的に含まれています。

したがって、StructuredProperty 行を削除することをお勧めします。

次に、KeyProperty 行で同様のエラーが発生しますが、KeyProperty については、直接のクラス参照 (Bid) の代わりに文字列 ('Bid') を使用して修正できます。

入札の内容にアクセスするには、outbyd_by_key.get() を使用する必要があります。

于 2013-09-27T20:08:01.507 に答える