2012-04-09 28 views
7

tôi đang cố gắng để tạo ra ndb.Model lớp như sinh viên và đối tượng ápOne-To-Nhiều Ví dụ trong NDB

class Subject(ndb.Model): 
    name = ndb.StringProperty() 

class Student(ndb.Model): 
    name = ndb.StringProperty() 
    subject = ndb.KeyProperty(kind=Subject) 

Một sinh viên có thể có nhiều đối tượng. Cách thêm và lưu trữ chúng trong Mô hình này. Tôi không thể tìm thấy bất kỳ ví dụ nào về nó. Đối với thuộc tính chuỗi .. có thuộc tính trường tức là lặp lại = true

Cách đạt được điều này và có bất kỳ ví dụ hoạt động nào trên web. Xin lỗi nếu nó là câu hỏi trùng lặp nhưng tôi đã thử với các kỹ năng hạn chế của tôi để tìm kiếm diễn đàn này.

+3

giải quyết. Thêm vào trong mô hình như: 'subject = ndb.KeyProperty (loại = Chủ đề, lặp đi lặp lại = True) ' và sau đó khi thêm các đối tượng method..in Sinh viên chỉ cần thêm std = Student() Sub1 = Chủ đề() sub2 = Tiêu đề() sub1.put() sub2.put() std.subject.append (Sub1) std.subject.append (sub2) std.put() – Anjana

+0

bạn có biết nếu có cách nào để tải lên các thuộc tính lặp lại bằng cách sử dụng các biến đổi nhập Bulkloader? – mehulkar

+0

Anjana trong bình luận của bạn với sửa chữa, không phải là bạn phải làm std.subject.append (sub2.key())? – Milwaukoholic

Trả lời

1

Sử dụng đối tượng làm khóa.

me = Student(key_name='KurzedMetal') 
programming = Subject(key_name='Programming') 
programming.put() 
me.subject = programming.key() 
me.put() 
+0

một báo trước, để có được tên bạn nên sử dụng phương thức name() của khóa() (ví dụ: "me.key(). Name() "), bạn có thể thêm một hàm tạo để lưu key_name vào thuộc tính name nếu bạn muốn. – KurzedMetal

+0

Cảm ơn KurzedMetal. Cảm kích điều đó. Những gì tôi đang tìm kiếm là nếu có nhiều hơn một môn học mà học sinh có liên quan. tức là nếu Sinh viên được liên kết với ** Lập trình ** và cũng với ** DBMS ** và nhiều người khác. Làm thế nào bạn có thể đạt được điều đó? – Anjana

0

Điều này giống như một câu hỏi cũ. Trong trường hợp người khác cần hiện nay, bạn nên xem Structured Propertieshttps://developers.google.com/appengine/docs/python/ndb/properties#structured. Ví dụ này rất rõ ràng và dễ làm theo.

+2

Thuộc tính có cấu trúc không điền vai trò chính xác của mối quan hệ 1 đến nhiều vì bạn không thể liên kết Địa chỉ (trong ví dụ đó) với bất kỳ điều gì khác. – zigdon

+1

Điều đó chỉ thực thi cấu trúc của một thuộc tính, nó không tạo ra mối quan hệ một-nhiều. – foundatron

8

Khi tôi cần 1 đến nhiều, tôi sử dụng các tính năng chính lặp lại. Code:

class Subject(ndb.Model): 
    name = ndb.StringProperty() 

class Student(ndb.Model): 
    name = ndb.StringProperty() 
    subjects = ndb.KeyProperty(kind='Subject', repeated=True) 

mẫu:

{% for subject in student.subjects %} 
    {{subject.get().name}} 
{% endfor %} 

NDB là NoSQL, do đó bạn sẽ không tìm thấy tài liệu tham khảo cho phụ huynh ở trẻ em. Tuy nhiên, bạn có thể thêm nó như thế. Đừng quên đặt giá trị khóa học sinh khi tạo chủ đề mới.

class Subject(ndb.Model): 
    name = ndb.StringProperty() 
    student = ndb.KeyProperty(kind='Student') 

class Student(ndb.Model): 
    name = ndb.StringProperty() 
    subjects = ndb.KeyProperty(kind='Subject', repeated=True) 
1

Định nghĩa:

class Subject(ndb.Model): 
    name = ndb.StringProperty() 

class Student(ndb.Model): 
    name = ndb.StringProperty() 
    subject = ndb.KeyProperty(kind=Subject,repeated=True) 

Cách sử dụng:

subject1 = Subject() 
subject1.put() 
subject2 = Subject() 
subject2.put() 
student = Student() 
student.subject.append(subject1.key) 
student.subject.append(subject2.key) 
student.put()