如何在不存在引用的情况下使用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中建议的内容。
您确定需要一对多的关系吗?用户只能是一个团队吗?如果是这样,什么停止创建空的参考? –
是的,每个用户只能加入一个团队,但一个团队拥有多个用户。你的意思是当我创建用户时,我设置了reference = None?我尝试这个,但它不适合我。 – hakunami