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

我有两个模型班级和学生。每个团队实体都有不止一个用户实体,我认为“一对多”是一个合适的模型。我这样的代码:如何在不存在引用的情况下使用referenceProperty创建模型的实体?

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,我需要先创建一个团队的实体,然后创建它的参考值设置为这支球队实体用户。但是,这里是问题所在,我想先创建用户,然后用户可以创建一个团队。那么,当我创建一个没有团队存在的用户时,如何设置参考?

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行时,我得到一个服务器错误。所以,我不能创建一个实体没有之前创建的参考?

回答:

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

也改变了最后一行的代码片段:

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

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

以上是 如何在不存在引用的情况下使用referenceProperty创建模型的实体? 的全部内容, 来源链接: utcz.com/qa/267254.html

回到顶部