2016-07-25 2 views
0

Я хочу, чтобы создать таблицу на моем шаблоне, показывающий некоторые данные, которые я получаю от метода, объявленного в моем классе TaskКак вызвать метод модели, используя объект как параметр в 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)' from '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 в качестве параметра, который ссылается на экземпляр, по которому вызывается метод.

Надеюсь, это имеет смысл для вас и поможет вам легко понять методы модели.

Смежные вопросы