Django仍然坚持(多对多)

时间:2016-06-10 20:33:48

标签: python django many-to-many

这个想法是,如果学生不理解某些内容,学生可以向他们的老师发送ping,但首先我要努力让学生,老师和他们所处的任何课程有关系 所以在我的模特经过几次尝试后,我想出了这个

模型

from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=50)


class Teacher(models.Model):
    name = models.CharField(max_length = 70)

class Lecture(models.Model):
    name = models.CharField(max_length = 70)
    members = models.ManyToManyField(
        Student,
        through = 'part_of_class',
        through_fields = ('lecture', 'student'),
    )
    lecturers = models.ManyToManyField(
        Teacher,
        through = 'Teacher_of_class',
        through_fields = ('lecture', 'teacher'),
    )

class Teacher_of_class(models.Model):
    lecture = models.ForeignKey(Lecture)
    teacher = models.ForeignKey(Teacher)

class part_of_class(models.Model):
    lecture = models.ForeignKey(Lecture)
    student = models.ForeignKey(Student)

问题是添加一个学生领域搞砸了,我甚至不确定这是正确的方式,这听起来在我脑海中,但我确信我错过了一些东西,任何线索?

2 个答案:

答案 0 :(得分:1)

我不完全确定您需要明确的中介关系(Teacher_of_class和part_of_class)。相反,您应该尝试利用其他模型中的字段来执行您想要的操作。例如,一个讲座通常会有一个以上的老师,还是只有一个?您可以使用Lecture中的某个字段对其中任何一个进行建模。

编辑:道歉,我最初误读了你的代码字段。我的建议是不要使用额外的关系类,除非你知道为什么需要它。

答案 1 :(得分:0)

如果你只想要一个可以有多个学生和多个讲师的讲座,你不需要有中间模型,如果你没有指定任何中级模型,Django会为你处理。如果你想存储具有这种关系的东西,我只会使用中间表。

此外,当您尝试将学生和教师对象添加到讲座模型时,请务必保存它们。

您的保存代码应如下所示:

aStudent = Student(name="Taco")
aTeacher = Teacher(name="Burrito")
aStudent.save()
aTeacher.save()
aLecture = Lecture(name="Cooking With Python!")
aLecture.members.add(aStudent)
aLecture.lecturers.add(aTeacher)
aLecture.save()

希望这有帮助!