计算模型字段

时间:2012-10-01 09:58:39

标签: django

您好我有以下型号

class Student(models.Model):
    student_id = models.CharField(max_length=3, unique=True)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    gender = models.CharField(max_length=1)
    teacher = models.ForeignKey(Teacher)


    def maths_cal_1(self):
        if self.student_model.filter(test__test_name__iexact="maths"):
            return self.student_model.s1- self.student_model.start


class Test(models.Model):
    test_name = models.CharField(max_length=40)
    test_out_of = models.IntegerField(null=True, blank=True)

    CHOICE = ( 
        (u'ENG', u'English'), 
        (u'MTS', u'Maths'),
        )
    KLA = models.CharField(max_length=10, choices=CHOICE)


class Display(models.Model):
    full_name = models.ForeignKey(Student, related_name='student_model')  
    test = models.ForeignKey(Test)
    start = models.CharField(max_length=10, null=True, blank=True)
    s1 = models.CharField(max_length=10, null=True, blank=True)

我无法锻炼的是如何根据在显示模型中的start和s1字段中输入的数字动态计算简单的数学运算。
我尝试使用'maths_cal_1'方法,但是当我尝试在模板中渲染结果时,我会得到错误或空白,具体取决于我将方法放在哪个模型中。 问题是我相信,每个学生对象都有很多测试。我似乎无法正确地计算所需的测试并返回结果。在这种情况下,我想为每个学生返回数学测试对象的计算s1-start字段。 如何为每个学生动态地为每个单独的测试模型进行这些计算? 感谢。

更新:工作代码:

    def maths_cal_1(self):
    cal_list = []

    for tname in ['Maths']:
        try:
            maths_test = self.student_model.get(test__test_name__iexact=tname)
            result = int(maths_test.s1) - int(maths_test.start)

            if result:
                cal_list.append(result)
            else:
                cal_list.append("")
        except (Display.DoesNotExist, ValueError):
            cal_list.append("")

    return cal_list

1 个答案:

答案 0 :(得分:0)

你走在正确的轨道上,但实际上你需要得到过滤器的结果,而不仅仅是检查它的存在。

try:
    maths_test = self.student_model.get(test__test_name__iexact="maths")
    result = maths_test.s1 - maths_test.start
except Display.DoesNotExist:
    result = None

return result

(注意还有一个问题,因为s1start都是char字段:从另一个字段中减去一个字段不会给你任何有用的东西。不确定你真正想要的是什么在这里。您可能需要将其转换为所需的类型。您能提供样本数据和期望的结果吗?)