2010-01-12 2 views
2

다른 클래스를 통해 객체와 관련된 여부를 결정. 사용자가 로그인하여 항목을 볼 때 이미 항목이있는 경우가 아니라면 '내 항목에 추가'버튼을 표시하고 싶습니다.사용자가 나는 아이템을 가진 사용자에 대한 데이터를 저장하는 <strong>사용자</strong> 모델, <strong>항목</strong> 모델 및 <strong>소유</strong> 모델이 장고 템플릿

내가 템플릿에이 코드를하려고했다 : 항목 내 소유 모델의 항목 개체에 대한 외래 키 이름입니다

{% if not user.possession_set.filter(item=item.id) %}  
<input type='submit' value='add to my items' /> 
{% endif %} 

가 기본 키입니다 item.id를 항목은 사용자

에 표시되지만이 오류 얻을 것 :

Could not parse the remainder: '(item=item.id)' 
,369을

데이터베이스를 쿼리하기 때문에 .filter() 함수를 사용할 수 없다고 생각합니다. 내가 장고의 템플릿 필터를 찾았습니다. http://docs.djangoproject.com/en/1.1/ref/templates/builtins/#get-digit 그러나 특정 값의 항목을 필터링하기 위해 결합 할 수있는 것이 없습니다. 내가 사용자를 얻고 있기 때문에 템플릿에있는 모든 정보를 가지고있는 것처럼 보입니다. 소유하고있는 항목 필드가 있어야하는 possession_set입니다. 그래서 그것은 단지 구문 일이라고 생각하고 있습니까?

도움 주셔서 감사합니다.

+0

좋은 질문이지만, 나는 이것을 수행하는 정식 방법이 장고에 무엇인지 궁금해하고 있었지만 조금 복잡하게 보입니다. – Alper

답변

2

이에 대한 사용자 지정 템플릿 필터를 작성할 수 있습니다.

def owns(user, id): 
    return not user.possession_set.filter(item=id) 

그런 다음 템플릿 :

{% load mystuff %} 
{% if user|owns:item.id %} 

확인 대한 추가 정보를 원하시면 http://docs.djangoproject.com/en/1.1/howto/custom-template-tags/에서 장고 문서. 필터 인수로 item.id을 전달해도 작동하는지 잘 모르겠다.

+0

굉장해! 그것은 훌륭하게 작동했습니다! 감사! – gohnjanotis

1

템플릿에서만 복잡한 표현식을 사용할 수 없습니다. 사용자가보기에서이 단추를 가질 수 있는지 여부를 정보를 계산하고 템플릿에 True 또는 False 값 하나만 전달하십시오. 예를 들어 :

allow_addition = not user.possession_set.filter(item=item.id) 

및 템플릿보기

에서

는 :

{% if allow_addition %} 
    <input type='submit' value='add to my items' /> 
{% endif %} 
+0

예! 그게 효과가있다. 이 작업을 수행하기를 원하는 항목이 많으면 무엇이 좋은 구현이 될지 궁금합니다. 조금 더 어렵게 만듭니다. –

관련 문제