1

已经检查了关于这个主题的问题,其中许多已经过时(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(地址为空)

谢谢你的帮助。

PS。请不要说它不可能,因为它可以通过管理面板 (GUI)

4

1 回答 1

4

Student要使用 来创建和关联Parent对象Teacher object,您可以使用.create()with .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,studentparent对象。

然后将它们关联起来,您可以执行以下操作:

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字段定义为而不是使用复数形式。Teacherstudentsstudent

于 2015-08-08T19:29:40.380 回答