2016-07-25 5 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 템플릿은 인수가있는 함수/메소드를 호출 할 수 없습니다. create a custom template tag이 필요하거나보기에서 함수를 호출하고 템플릿에 결과를 보내면됩니다. See previous question.

+0

이 오류 메시지가 나타납니다. > '(task.task_id)'에서 '(task.task_id)'나머지를 구문 분석 할 수 없습니다. –

+0

오, 그게 템플릿 오류입니다. 방금 조회 한 및 장고 서식 파일에서 인자로 함수/메서드를 호출 할 수없는 것 같습니다. 사용자 정의 템플릿 태그 (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을 전달하기 때문입니다.

나는 이것이 당신에게 의미가 있으며 간단한 방법으로 모델 방법을 이해하는 데 도움이되기를 바랍니다.

관련 문제