Как заполнить вложенные поля ManyToMany в Django с помощью Shell?

Проверили вопросы по этой теме на SO, многие из них устарели (dj<=1.4), поэтому задаете новый вопрос. Я думаю, это просто, я много начинаю с Django и Python.

У меня есть несколько моделей, из которых есть вложенные ManyToManyFieldsЯ хочу знать, как я могу сохранить объект на нижнем уровне, включая все верхние уровни. То есть, просто добавив объект учителя, я хочу добавить учеников и родителей одним махом.

Мои модели

class Parent(models.Model):
    name = models.CharField(max_length=10)
    address = models.TextField(blank=True)

class Student(models.Model):
    name = models.CharField(models.Model)
    parents = models.ManyToManyField(Parent)

class Teacher(models.Model):
    name = models.CharField(max_length=10)
    student = models.ManyToManyField(Student)

Я знаю, чтобы создать объект для простой модели, Teacher.objects.create(name='some name') но не знаю, как заполнить ученика и родителей.

Пример данных

teacher: Susan

students: Alan, Mike

parents: Alan-> George, Mike-> John Doe (адрес должен быть пустым)

Спасибо за любую помощь.

мкСм. пожалуйста, не говорите, что это невозможно, так как это возможно через панель администратора (GUI)

1 ответ

Решение

Создавать и связывать Student а также Parent объекты, использующие Teacher object , ты можешь использовать .create() вместе с .add() ,

Например:

teacher =  Teacher.objects.create(name='some name')
student = Student.objects.create(name='some_name')
parent =  Parent.objects.create(name='some_name', address='some_address')

Это создаст teacher, student а также parent объект.

Затем, чтобы связать их, вы можете сделать что-то вроде:

teacher.student.add(student) # associate the 'teacher' object with the  'student' object 

student.parents.add(parent) # associate the 'student' object with the 'parent' object

Для вашего случая вы можете сделать что-то вроде:

teacher = Teacher.objects.create(name='Susan') # create a teacher object
student1 = Student.objects.create(name='Alan') # create 1st student
student2 = Student.objects.create(name='Mike') # create 2nd student
parent1 = Parent.objects.create(name='George') # create parent object
parent2 = Parent.objects.create(name='John Doe') # create parent object

teacher.student.add(student1) # associate teacher with 1st student
teacher.student.add(student2) # associate teacher with 2nd student

student1.parents.add(parent1) # associate 1st student with parent1
student2.parents.add(parent2) # associate 2nd student with parent2

Примечание: было бы лучше, если бы вы определили student поле в Teacher модель как students вместо student т.е. используйте форму множественного числа.

Другие вопросы по тегам