Как заполнить вложенные поля 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
т.е. используйте форму множественного числа.