【问题标题】:Auto-fill Django models自动填充 Django 模型
【发布时间】:2018-12-22 04:15:56
【问题描述】:

我的模型包含 3 个类。

class Student(models.Model):
    name = models.CharField(...)
class Subject(models.Model):
    subject = models.CharField(...)

class Attendance(Student, Subject):
    att = model.IntegerField()

现在,我想为每个学生的每个科目创建一个考勤表。因此,我不想再次为每个学科和学生填写学科和学生的详细信息。请告诉我这样做的最佳方式,以便在管理面板中我只想添加每个主题和学生一次。

可能有多个学生在学习一门学科,并且一个学生也可能有多个学科。

(您可以告诉我另一种方法,而不是继承 Student 和 Subject)。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    使用多对多字段

    class Student(models.Model):
        name = models.CharField(...)
        attendance = models.ManyToMany(Subject)    
    
    class Subject(models.Model):
        subject = models.CharField(...)
    

    会是这样的

    id   |    student_id   |  subjects_id
    -----------------------------------------
    1    |    1            |  10
    2    |    4            |  11
    3    |    4            |  19
    4    |    5            |  10
    ...
    ~1000
    

    每个学生都有多个科目...而多个科目可以来自我的学生

    Obs.:通常我想将我的 ManyToMany 关系称为复数形式的第二个表的名称......所以主题

    用法:

    all_students = Student.objects.all()
    all_subjects = Subject.objects.all()
    all_subjects_from_student = Student.objects.get(id=1).attendance.all()
    

    我将如何标记特定学生的出勤情况 特定主题?

    particular_student = Student.objects.get(id=1) # When 1 is the student ID
    particular_subject_of_student = particular_student.filter(id=1) # When 1 is the subject ID
    

    https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_many/

    编辑如果您在出勤时需要任何新字段,您也可以在不使用多对多的情况下这样做

    class Student(models.Model):
        name = models.CharField(...)
    
    class Subject(models.Model):
        subject = models.CharField(...)
    
    class Attendance(Student, Subject):
        att = models.IntegerField()
        subject = models.ForeignKey(Subject)
        student = models.ForeignKey(Student)
        ... # You can add more fields if you like
    

    这里有一个和你一样的问题:django accessing raw many to many created table fields

    【讨论】:

    • 如何标记特定学生对特定科目的出勤率?
    • 回答我一些事情...出勤率是每个学生的一门或多门科目的关系?
    • 每个学生都有很多科目。因为每个学生都应该有一个单独的出勤整数字段,对应于每个科目。
    • 这个科目可以被很多学生使用吗?还是每个科目只能针对一个学生?
    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 2021-03-16
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    相关资源
    最近更新 更多