2012-10-01 143 views
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」的方法嘗試這個,但是當我嘗試呈現在模板的結果,我不是得到錯誤或取決於哪種模式,我把在方法空白。 問題是,我相信,每個學生對象有很多測試。我似乎無法正確執行所需測試的計算並返回結果。在這種情況下,我想返回每個學生的數學Test對象的計算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 

回答

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都是字符領域:從一箇中減去其他不會給你任何有用不知道你真的打算在這裏做你。可能需要將其轉換爲所需的類型。你能提供的樣本數據和期望的結果?)

+0

感謝丹尼爾,進行一些調整我有你的代碼工作(我已經編輯了我與其他人的利益最終代碼的問題) 。這些字段是CharFields的原因是因爲不是每個測試結果都是int形式。有些是基於等級的(A,B)等。 –