如何在没有引用的情况下使用referenceProperty创建模型的实体?

时间:2012-05-03 08:26:07

标签: google-app-engine google-cloud-datastore

我有两个模型类Team和Student。每个Team实体都有多个Users实体,我认为“一对多”是一个合适的模型。我的代码是这样的:

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)

关注this document,我需要首先创建一个Team实体,然后创建其参考设置为此Team实体的Users。但是,这是问题,我想首先创建用户,然后用户可以创建一个团队。那么,当我创建一个没有团队的用户时,如何设置引用?

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行时,我收到服务器错误。那么,我不能创建一个没有它之前创建的实体的实体吗?

1 个答案:

答案 0 :(得分:0)

在创建reference实例时,您是否尝试将Team设置为None模型为User

同时将代码段的最后一行更改为:

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

即。添加required=False。这是this answer中建议的内容。