我有兩個模型班級和學生。每個團隊實體都有不止一個用戶實體,我認爲「一對多」是一個合適的模型。我這樣的代碼:如何在不存在引用的情況下使用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行時,我得到一個服務器錯誤。所以,我不能創建一個實體沒有之前創建的參考?
您確定需要一對多的關係嗎?用戶只能是一個團隊嗎?如果是這樣,什麼停止創建空的參考? –
是的,每個用戶只能加入一個團隊,但一個團隊擁有多個用戶。你的意思是當我創建用戶時,我設置了reference = None?我嘗試這個,但它不適合我。 – hakunami