【问题标题】:How to select students for teachers automatically in Django如何在 Django 中自动为教师选择学生
【发布时间】:2020-08-23 09:07:46
【问题描述】:

这是我的学生课

class Students(AbstractUser):
    mobile_number = models.TextField()

我的老师课堂

class Teacher(models.Model):
    students = models.TextField()

如何在 Django 中自动将 6 个学生关联到一个老师

【问题讨论】:

    标签: python django web django-models web-development-server


    【解决方案1】:

    您需要更改模型。 如果每个学生只能有一位老师,那么您需要以这种方式更改学生模型:

    class Student(AbstractUser): 
        mobile_number = models.TextField()
        teacher = models.ForeignKey("Teacher", on_delete=models.SET_NULL, null=True)
    

    然后您可以像这样将老师分配给学生 teacher = Teacher.objects.get(pk=...) #get required teacher 要将这位老师分配给几个学生,您可以 Student.objects.filter(pk__in=[id_student1, id_student2, ...]).update(teacher=teacher)

    如果您想分配任意数量的学生,那么在您“聘请”您需要做的老师的地方,找到所需数量的没有老师的学生,然后为他们分配老师。你可以这样做:

    for student in Students.filter(teacher__isnull=True)[:6]:
       student.teacher = teacher #where teacher is your hired teacher
       student.save()
    

    如果您的学生可以有多个老师,那么您需要使用多对多关系 (https://docs.djangoproject.com/en/3.0/topics/db/examples/many_to_many/)

    class Student(AbstractUser):
        mobile_number = models.TextField()
        teacher = models.ManyToManyField("Teacher", related_name="students")
    

    如果要将多个学生分配给一位老师,您可以:

    student1 = Student.objects.get(pk=...)
    student2 = Student.objects.get(pk=...)
    ...
    teacher.students.set([student1, student2, ...]) # this will replace all students with selected
    teacher.students.add([student1, student2, ...]) # this will add selected students to other students connected with this teacher
    

    【讨论】:

    • 其实我希望一位老师最多有 6 名学生来教他们并给他们布置作业
    • 正如我之前在回答中所说,您可以使用 ForeignKey(如果 1 个学生不能有很多老师)和 ManyToManyField(如果一个学生可以有多个老师)选择您想要的任何变体
    • 好的,那么我们如何自动将学生添加到教师中意味着将学生分配给所有教师,例如如果有 12 名学生,我们将雇用 2 名教师,他们将自动获得 6 名学生而无需从管理员添加跨度>
    • 忘记添加student.save()。如果现在一切正常,你能接受我的回答吗?
    • 是的,告诉我怎么做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2017-01-21
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    相关资源
    最近更新 更多