2014-04-18 3 views
3

Student 엔티티가 키를 사용하여 Class 엔티티에 추가되는 앱을 개발하려고합니다. 클래스에서, 나는 List의 키로 식별 할 수 있습니다. 정수 나 String이 될 수 있습니다. 그러나 어떻게 해야할지 전혀 모르겠습니다. (제발, 제 첫 번째 프로젝트는 파이썬을 사용합니다) 여기 내 코드입니다 :Google App Engine의 ndb.KeyProperty 사용 방법

import webapp2 
from webapp2_extras import json 
from google.appengine.ext import ndb 

registrationPage = """ 
<html> 
<head><title>Student Registration</title><head> 
<body> 
<h1>Student Registration</h1> 
<form action="/" method="post"> 
<table border="1"> 
<tr><td>Srudent's BannerId</td><td><input type="number" size="6" name="banner_id"/></ 
td></tr> 
<tr><td>Student's Name</td><td><input type="text" size="50" name="name"/></td></tr> 
<tr><td><input type="submit" name="submit" value="Register Student"/></td></tr> 
</table> 
</form> 
</body> 
</html> 
""" 
class MathClass (ndb.Model): 
class_Id = ndb.IntegerProperty(required=True) 
professor_name = ndb.StringProperty(required=True) 
number_of_students = ndb.IntegerProperty() 
students = ndb.KeyProperty(repeated=True) 



# A Class can return its data in JSON format 
def toJSON(self): 
    jsonData = { 
     "class_id": self.key.id(), 
     "teacher": self.teacher, 
     "number_of_students": str(self.number_of_students), 
    } 
    return json.encode(jsonData) 



class Student(ndb.Model): 
    banner_id = ndb.IntegerProperty(required=True) 
    name=ndb.StringProperty() 

# A Student can return its data in JSON format 
def toJSON(self): 
    jsonData = { 
     "banner_id": self.key.id(), 
     "name": self.name, 
    } 
    return json.encode(jsonData) 

    def toTableRow(self, points): 
     return "<tr><td>" + self.key.id() + "</td><td>" + self.name + "</td></tr>" 

class StudentHandler(webapp2.RequestHandler): 
def post(self): 
    banner_id = self.request.get('banner_id') 
    callback = self.request.get('callback') 
    student = Student.get_by_id(banner_id) 
    if student:   # This student name already exists. 
     self.error(409) # This is the HTTP status code for 'unable to process due to conflict' 
    else: 
     id = int(self.request.get('banner_id')) 
     i = int(self.request.get('banner_id')) 
     n = self.request.get('name') 
     student = Student(id=banner_id, banner_id = id, name=n) 
     student.put() 
     if callback: 
      self.response.write(callback + '(' + student.toJSON + ')') 
     else: 
      self.response.write(student.toJSON()) 


     class RegistrationHandler(webapp2.RequestHandler): 

      def get(self): 
      self.response.write(registerationPage) 

     app = webapp2.WSGIApplication([ 
      ('/', StudentHandler), 
      ('/reg', RegistrationHandler) 
     ], debug=True) 

HTML 양식을 사용하여, 나는 내 로컬 datastore.This에 Student 엔티티를 저장 할 수 있었다 내가 내 새로와 클래스 개체를 만들어 가야합니까 어떻게 붙어 될 곳이다 그 수업의 구성원으로서 학생을 만들었습니까?

답변

6

그냥 가져 오거나 클래스의 인스턴스를 생성 한 후 학생들 속성

subject = MathClass.get_or_insert(key_name="math_101") 
    subject.students.append(some_student.key) 
    subject.put() 

학생이 속성에 이미있는 경우 당신은 정말 확인해야하는 핵심 학생들을 추가합니다. 예 : if not student.key in subject.students

많은 오류 검사 등이 여기에 필요합니다. 그 코드를 클래스의 메쏘드, 즉 MathClass.enroll로 만들면 subject.enroll(student)