【问题标题】:How to create a custom student group and add students to that group?如何创建自定义学生组并将学生添加到该组?
【发布时间】:2022-01-21 13:21:35
【问题描述】:

我正在创建一个学生项目管理系统,每个学生都会有一个项目组。只有管​​理员才能使用下拉列表菜单将学生添加到特定组。到目前为止,我已经创建了一个学生模型和一个小组模型,例如这些。

class Student(models.Model):
    user = models.OneToOneField(User,null=True,on_delete=models.CASCADE)
    id = models.IntegerField(max_length=11,primary_key=True)
    course_taken = models.CharField(max_length=50,null=True)
    specialization = models.CharField(max_length=50,null=True)
    area_of_interest = models.CharField(max_length=50,null=True) 
    group = models.ForeignKey(Group,null=True)
    def __str__(self):
        if self.user.first_name and self.user.last_name:
            full_name = self.user.first_name + " " + self.user.last_name
        return full_name 

class Group(models.Model):
    id = models.AutoField(primary_key=True)
    members = models.OneToManyField(User,through='Student')
    project_id = models.ForeignKey(Project,null=True)

如何从这里继续?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:
    from django.db import models
    
    class Reporter(models.Model):
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=30)
        email = models.EmailField()
    
        def __str__(self):
            return "%s %s" % (self.first_name, self.last_name)
    
    class Article(models.Model):
        headline = models.CharField(max_length=100)
        pub_date = models.DateField()
        reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
    
        def __str__(self):
            return self.headline
    
        class Meta:
            ordering = ['headline']
    

    如本例所示,您可以通过模型关系(一对一、一对多、多对一、多对多)来做到这一点。 我建议查阅文档: https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_one/

    【讨论】:

      【解决方案2】:

      您必须创建三个不同的类来完成该任务。通过 Enrollment 课程,管理员将能够将学生添加到特定组。

      class Student(models.Model):
          name = models.CharField(max_length=30)
      
          def __str__(self):
              return self.name
      
      
      class Course(models.Model):
          name = models.CharField(max_length=30)
          student = models.ManyToManyField(Student, through='Enrollment')
      
          def __str__(self):
              return self.name
      
      
      class Enrollment(models.Model):
          student = models.ForeignKey(Student, on_delete=models.CASCADE)
          course = models.ForeignKey(Course, on_delete=models.CASCADE)
          date_enrolled = models.DateField()
          final_grade = models.CharField(max_length=1, blank=True, null=True)
      
      
          class Meta:
              unique_together = [['student', 'course']]
      

      【讨论】:

        猜你喜欢
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 2020-06-12
        • 1970-01-01
        • 2020-01-16
        • 1970-01-01
        • 2022-08-03
        • 2022-09-23
        相关资源
        最近更新 更多