【问题标题】:How to use Google App Engine's ndb.KeyProperty如何使用 Google App Engine 的 ndb.KeyProperty
【发布时间】:2014-06-02 19:14:31
【问题描述】:

我正在尝试开发一个应用程序,其中Student 实体通过其键添加到Class 实体。所以在课堂上,我可以让List 的学生通过他们的键来识别,键可以是整数或字符串。但我不知道该怎么做。(请多多包涵,这是我使用 Python 的第一个项目) 这是我的代码:

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 表单,我已经能够在本地数据存储中保存 Student 实体。这就是我卡住的地方,我该如何创建一个班级实体,让我的新创建的学生成为其中的成员上课?

【问题讨论】:

    标签: python google-app-engine app-engine-ndb


    【解决方案1】:

    只需获取或创建类实例,然后将学生键附加到学生属性

      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)

    【讨论】:

      猜你喜欢
      • 2013-05-24
      • 1970-01-01
      • 2020-01-01
      • 2010-11-20
      • 2017-12-04
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多