0

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 行を追加すると、サーバー エラーが発生しました。では、参照が作成されていないエンティティを作成することはできませんか?

4

1 に答える 1

0

インスタンスを作成するときのreferenceようにTeamモデルに設定しようとしましたか?NoneUser

また、コード スニペットの最後の行を次のように変更します。

reference = db.ReferenceProperty(Team,required=False)

すなわち、追加しrequired=Falseます。これは、この回答で提案されているものです。

于 2012-05-03T08:39:16.570 に答える