【问题标题】:Django creating sub fieldsDjango 创建子字段
【发布时间】:2012-07-05 09:03:49
【问题描述】:

我是 django 的新手。我试图找出是否可以在 django 中创建一个需要多个相互关联的输入的字段。例如: 我正在尝试创建一个学生评估记录,我想在其中明智地存储每个学生科目的分数。为此,我想要一个像 主题1(下拉菜单以选择主题)(最高分数)(获得的分数) 主题2(下拉菜单选择主题)(最高分数)(获得的分数) 等等..

我可以这样做吗? 或者有没有更好的方法来做到这一点,比如当我输入前一个领域的学生所攻读的学位或课程时,它会为我获取该特定学位下的科目列表,并且我可以为每个科目输入分数。这样可以更容易地显示学生明智的记录以及学科明智。

请帮忙..提前谢谢!!

回复第一个答案: 还没有工作..要么我不明白你,要么我执行错了 这是代码。我哪里错了?

class Evaluation(models.Model):
 student = models.ForeignKey('Student', related_name='Evaluation_Students')
 subject = models.ForeignKey('Subject', related_name='Evaluation_Subjects')
 def __unicode__(self):
    return self.Evaluation_Students




class Student(models.Model):
Student_First_Name = models.CharField(max_length = 50,default = 0)
Last_Name = models.CharField(max_length = 50, default = 0)
Registeration_Number = models.CharField(max_length = 12,default=0,unique=True)
SelectDegree = models.CharField(max_length=100,default = 0,choices=Allowed_courses)
Subjects= models.CharField(max_length = 100,choices=Subjects,default='-')
evaluations = models.ManyToManyField('Evaluation')
def __unicode__(self):
    return "{} {}".format(self.Student_First_Name, self.Last_Name)



class Subject(models.Model):
 SelectSubject = models.CharField(max_length = 4,choices=Subjects)
 Test_Type = models.CharField(max_length = 12,default= '-')
 Maximum_marks = models.IntegerField(default = 0)
 Marks_Obtained =  models.IntegerField(default = 0)

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    听起来您需要创建一个名为“评估”的附加模型,并使用多对多字段将其链接到学生。

    Student model:
         fields…
         evaluations = models.ManyToManyField(Evaluation)
    
    
    Evaluation model:
          student = models.ForeignKey(Student)
          subject = models.ForeignKey(Subject)
          mark = models.CharField(…whatever…)
    

    您也可以在没有多对多字段的情况下执行此操作并自己管理关系。例如,在学生模型中添加一个属性:

     Student model:
    
           @property
           def evaluations(self):
                return Evalution.objects.filter(student=self)
    

    【讨论】:

    • 尚未工作.. 要么我不明白你的意思,要么我执行错了这里的代码。我哪里错了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2011-08-26
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多