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

7

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

<code>class Subject(ndb.Model):
     name = ndb.StringProperty()

class Student(ndb.Model):
    name = ndb.StringProperty()
    subject = ndb.KeyProperty(kind=Subject)
</code>

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

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

Анджана в вашем комментарии с исправлением, вы не должны делать std.subject.append (sub2.key ())? Milwaukoholic
@ Milwaukoholic Я думаю, что вы делаете std.subject.append (sub2.key) Wade Norris
Решено. Добавлено в модель как:subject = ndb.KeyProperty(kind=Subject,repeated=True)  а затем при добавлении метода..в объекте Student просто добавьте std = Student () sub1 = Subject () sub2 = Subject () sub1.put () sub2.put () std.subject.append (sub1) std.subject. append (sub2) std.put () Anjana
Знаете ли вы, если есть способ загрузить повторяющиеся свойства с помощью преобразований импорта массового загрузчика? mehulkar

Ваш Ответ

4   ответа
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, Пример очень понятен и легко поддается.

Структурированные свойства не выполняют точную роль отношения 1-ко-многим, поскольку вы не можете связать адреса (в этом примере) с чем-либо еще.
Это только усиливает структуру свойства, но не создает отношения «один ко многим».
7

Код:

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)
1

me = Student(key_name='KurzedMetal')
programming = Subject(key_name='Programming')
programming.put()
me.subject = programming.key()
me.put()
одно предостережение, чтобы получить имя, вы должны использовать метод name () ключа () (например: & quot; me.key (). name () & quot;), вы можете добавить конструктор, чтобы сохранить имя_ ключа в Назовите свойство, если хотите.
Спасибо KurzedMetal. Ценить это. Что я ищу, так это наличие нескольких предметов, с которыми связан студент. т.е. если ученик связан сProgramming а также сDBMS и многие другие. Как вы можете этого достичь? Anjana

Похожие вопросы