我想在我的模板上生成一个表,显示我从Task类中声明的方法获得的一些数据
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
我知道在模板上调用方法没有任何意义,但是我需要用什么来显示这些数据呢?
{{task.is_finished(task.task_id)}}
答案 0 :(得分:1)
当你编写一个模型方法时,你传递self
作为参数,这显然是指实例本身。将您的模型方法更改为此类
class Task(models.Model):
fields
def is_finished(self):
return appropriate boolean from here
现在,在您的模板中,您可以将其简单地用作{{ task.is_finished }}
。请注意,我没有传递任何id
作为参数。这是因为,在编写模型方法时,您将self
作为参数传递,该参数引用了正在调用哪个方法的实例。
我希望这对你有意义,并帮助你以简单的方式理解模型方法。
答案 1 :(得分: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