0

こんにちは私は次のモデルを持っています

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)

私が理解できないのは、表示モデルの開始フィールドとs1フィールドに入力された数値に基づいて、その場で簡単な数学演算を計算する方法です。
'maths_cal_1'メソッドでこれを試みましたが、テンプレートで結果をレンダリングしようとすると、メソッドを配置するモデルに応じてエラーまたは空白が発生します。問題は、各学生オブジェクトに多くのテストがあると信じていることです。 。希望のテストを正しく計算して結果を返すことができないようです。この場合、各生徒のmathsTestオブジェクトの計算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
4

1 に答える 1

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

s1(とが両方ともcharフィールドであることを考えると、さらに問題があることに注意してくださいstart。一方を他方から減算しても、何も役に立ちません。ここで実際に何をしようとしているのかわからないので、目的の型にキャストする必要があるかもしれません。サンプルデータと望ましい結果を提供できますか?)

于 2012-10-01T10:15:57.600 に答える