7

Вопрос по – Пример «один ко многим» в NDB

Я пытаюсь создать класс ndb.Model, как студенты и предметы

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

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

Один студент может иметь много предметов. Как добавить и сохранить их в этой модели. Я не смог найти ни одного примера. Для свойства String .. есть свойство поля, т.е. repeat = true

Как этого добиться и есть ли работающий пример в интернете. Извините, если это повторяющийся вопрос, но я попытался с ограниченными навыками поиска на этом форуме.

Анджана в вашем комментарии с исправлением, вы не должны делать std.subject.append (sub2.key ())?

Dec 15, 2014, 6:11 PMот

Решено. Добавлено в модель как:<code>subject = ndb.KeyProperty(kind=Subject,repeated=True)</code>  а затем при добавлении метода..в объекте Student просто добавьте std = Student () sub1 = Subject () sub2 = Subject () sub1.put () sub2.put () std.subject.append (sub1) std.subject. append (sub2) std.put ()

Apr 11, 2012, 5:14 AMот

@ Milwaukoholic Я думаю, что вы делаете std.subject.append (sub2.key)

Apr 03, 2016, 9:43 PMот

Знаете ли вы, если есть способ загрузить повторяющиеся свойства с помощью преобразований импорта массового загрузчика?

Jan 15, 2013, 9:23 AMот

4ответа

1

Используйте тему в качестве ключа.

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

Определение:

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

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

Использование:

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

Это похоже на старый вопрос. В случае, если кому-то еще это нужно сейчас, вы должны посмотреть наStructured Properties https://developers.google.com/appengine/docs/python/ndb/properties#structured, Пример очень понятен и легко поддается.

7

Когда мне нужно 1 ко многим, я использую повторные свойства ключа. Код:

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

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

шаблон:

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

ndb - это nosql, поэтому вы не найдете ссылку на родителя в дочернем элементе. Тем не менее, вы можете добавить это так. Не забудьте установить значение ключа учащегося при создании нового предмета.

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)

RelatedQuestions