Извиняюсь в первом примере я использовал одно и тоже имя переменной - ref, поэтому меня не правильно поняли, сейчас распишу подробнее.
Есть файл database там должны быть описаны все модели datastore, дело в том что многие таблицы линкуются. В Google App Engine datastore для этого используется такой синтаксис как я привел выше. И получается ситуация когда я немогу расположить классы в таком порядке чтобы классы инициализировались попорядку, что самое интересное я могу создать экземляр класса в методе класса который находится выше, чем создаваемый класс. А вот использовать рефенс класса не могу.
Вот черновой оригинал файла с моделями таблиц:
#!/usr/bin/env python
from google.appengine.ext import db
class Battle(db.Model):
id = db.StringProperty()
date = db.DateTimeProperty()
trainer1 = db.ReferenceProperty(reference_class=Trainer)
trainer2 = db.ReferenceProperty(reference_class=Trainer)
pokemon1 = db.ReferenceProperty(reference_class=Pokemon)
pokemon2 = db.ReferenceProperty(reference_class=Pokemon)
class BattleAction(db.Model):
battle = db.ReferenceProperty(required=True, reference_class=Battle)
step = db.IntegerProperty(required=True, default=1)
start_time = db.TimeProperty(required=True)
action_time = db.TimeProperty(required=True)
active_trainer = db.ReferenceProperty(required=True, reference_class=Trainer)
action_id = db.IntegerProperty(required=True)
class Pokemon(db.Model):
id = db.IntegerProperty(required=True)
trainer = db.IntegerProperty(required=True)
type = db.ListProperty(required=True)
form = db.ListProperty(required=True)
property = db.ListProperty(required=True)
pattern = db.IntegerProperty(required=True)
stats = db.ReferenceProperty(required=True, reference_class=PokemonStats)
effort_stats = db.ReferenceProperty(required=True, reference_class=PokemonStats)
iv_stats = db.ReferenceProperty(required=True, reference_class=PokemonStats)
ev_stats = db.ReferenceProperty(required=True, reference_class=PokemonStats)
class PokemonStats(db.Model):
hp = db.IntegerProperty(required=True)
attack = db.IntegerProperty(required=True)
defence = db.IntegerProperty(required=True)
special_attack = db.IntegerProperty(required=True)
special_defence = db.IntegerProperty(required=True)
speed = db.IntegerProperty(required=True)
class pokemon_attack(db.Model):
id = db.IntegerProperty()
type = db.IntegerProperty()
power = db.IntegerProperty()
accuracy = db.IntegerProperty()
mana = db.IntegerProperty()
class Trainer(db.Model):
id = db.StringProperty(required=True)
name = db.StringProperty(required=True)
online = db.BooleanProperty(required=True, default=False)
last_activity = db.DateTimeProperty(required=True)
channel_id = db.StringProperty()