Team と Student の 2 つのモデル クラスがあります。各 Team エンティティには複数の Users エンティティがあり、「1 対多」が適切なモデルだと思います。私は次のようにコーディングします:
class Team(db.Model):
teamNmae = db.StringProperty(required=True)
teamID = db.IntegerProperty(required=True)
class Users(db.Model):
name = db.StringProperty(required=True)
reference = db.ReferenceProperty(Team,collection_name=teamMembers)
このドキュメントに従ってください。最初にチーム エンティティを作成し、次にこのチーム エンティティへの参照が設定されたユーザーを作成する必要があります。しかし、ここに問題があります。最初にユーザーを作成したいのですが、次にユーザーがチームを作成できます。では、チームが存在しないユーザーを作成するときに参照を設定するにはどうすればよいですか?
EDIT1:
参照エンティティを作成せずにエンティティを作成できるかどうかをテストする簡単なコードを記述します。
_author__ = 'Steven_yang'
import os
import webapp2
from google.appengine.ext import db
from google.appengine.ext.webapp import template
defaultStu = [
'qingWANG',
'stevenYANG',
'jingZHU',
'conghuiHE',
'lianDUAN',
'xinHAO'
]
class Students(db.Model):
#reference = db.ReferenceProperty(Team,collection_name='teamMember',required=False)
name = db.StringProperty(required=True)
class Team(db.Model):
teamName = db.StringProperty(required=True)
teamID = db.IntegerProperty(required=True)
def createStu():
stu_count = Students.all().count(1)
if stu_count == 0:
for stu in defaultStu:
newStu = Students(name = stu)
newStu.put()
class testReferenceHandler(webapp2.RequestHandler):
def get(self):
createStu()
self.render_page()
def render_page(self):
stus = Students.all().fetch(10)
templateValues={}
templateValues['stus'] = stus
form = os.path.join(os.path.dirname(__file__),'template/testref.html')
renderForm = template.render(form,templateValues)
self.response.out.write(renderForm)
app = webapp2.WSGIApplication([('/testref',testReferenceHandler)],debug=True)
HTML ファイルは次のとおりです。
<body>
{% for s in stus%}
<div>{{s.name}}</div>
{% endfor%}
</body>
</html>
ReferenceProperty 行をコメントアウトすると、すべて問題ありません。ReferenceProperty 行を追加すると、サーバー エラーが発生しました。では、参照が作成されていないエンティティを作成することはできませんか?