2016-07-25 86 views
0

我想生成我的模板表,顯示了一些數據,我從一個方法獲取宣佈對我的任務類如何調用模型方法,在Django中使用對象作爲參數?

models.py

class Task(models.Model): 
... 
def check_if_finished(self): 
    resp = requests.get(
    'http://my.rest.api/tasks/view/{}'.format(self.task_id)) 
    resp_data = resp.json() 
    resp_finished = resp_data['task']['started_on'] 
    if resp_finished is None: 
     return False 
    else: 
     return resp_finished 

我知道這是沒有意義的調用方法在模板上,但我需要用什麼來顯示這些數據?

template.html

{{task.is_finished(task.task_id)}}

回答

0

我不完全明白你的問題,爲什麼你就不能在TASK_ID作爲發送一個參數?

class Task(models.Model): 
... 
def check_if_finished(self, task_id): 
    resp = requests.get(
    'http://my.rest.api/tasks/view/{}'.format(task_id)) 
    resp_data = resp.json() 
    resp_finished = resp_data['task']['started_on'] 
    if resp_finished is None: 
     return False 
    else: 
     return resp_finished 

然後隨時調用它:

{{task.check_if_finished(task.task_id)}}

也可以使TASK_ID的可選參數。

def check_if_finished(self, task_id=None): 
    task_id = task_id or self.task_id 
    resp = requests.get... 

我不知道爲什麼你不想在實例上使用task_id。如果你永遠不會那麼也許它應該是一個靜態的方法?

@staticmethod 
def check_if_finished(cls, task_id): 
    ... 

我不認爲Django模型阻止任何這些選項。希望有幫助的東西,否則我需要更多的信息和你正在努力完成的事情。

編輯:Django模板不允許調用具有參數的函數/方法。您需要create a custom template tag或者只是在視圖中調用該函數並將結果發送到模板。 See previous question

+0

當我嘗試我得到此錯誤消息: >無法解析餘額:'(task.task_id)'從'task.check_if_finished(task.task_id)' –

+0

哦,這是一個模板錯誤。我只是看着它,似乎你不能用Django模板中的參數調用函數/方法。您需要創建自定義模板標記(https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#howto-custom-template-tags)或在視圖中進行檢查併發送將正確的值放入模板中。 –

+0

對於我的'Task.objects.all()'我想通過API請求來檢查任務是否完成。然後,我想在表格中顯示該任務是否完成。 –

1

當您編寫模型方法時,您將self作爲參數傳遞,這明顯是指實例本身。你的模型方法更改爲這樣的事情

class Task(models.Model): 
    fields 
    def is_finished(self): 
     return appropriate boolean from here 

現在在你的模板,你可以使用這個簡稱爲{{ task.is_finished }}。請注意,我沒有通過任何id作爲參數。這是因爲,在編寫模型方法時,您將self作爲參數傳遞,該參數指向調用哪個方法的實例。

我希望這對您有意義,並幫助您以簡單的方式瞭解模型方法。

相關問題