2011-09-12 3 views
2

나는 2 개 장고 모델이 - 모델 A와 모델 B를 모델 B가 모델 A. 상속을Django 템플릿에서 상속 된 모델을 구분하는 방법은 무엇입니까?

같이 나는 템플릿에서 다르게 각 모델을 취급 할 수 있도록하려는
class ModelA(models.Model): 
    # Fields 

class ModelB(ModelA): 
    # More fields 

:

{% if obj.is_modelA %} <-- This is where my problem lies 
    Do something 
{% elif obj.is_modelB %} <-- This is where my problem lies 
    Do something else 
{% endif %} 

나는 함께 뭔가를 해킹 할 수 있다고 확신하지만, 이것을하기 위해 선호하는 방법이 있는지 정말로 알고 싶다. 사전에

많은 감사합니다 :)이 작업을 수행하는 좋은 방법이

답변

0

확실하지합니다. 아마 속성으로 모델의 이름을 추가 할 것 :

@property 
def model_name(self): 
    return self.__class__.__name__ 
1

나는 모델보다는 @zeekay에서 알 수 있듯이 템플릿에 비교 그것을 말할 것입니다. 이는 내부 세부 사항에 불쾌한 의존성을 낳습니다 (클래스 이름을 변경하면 문제가 발생합니다).

I는 다음과 같이 오히려 그것을 할 것 : 그것은 isinstance 또는 self.__class__.__name__의 비교 중 하나와 속성으로 수행하지만, 수

class ModelA(models.Model): 
    is_such_and_such = False 

class ModelB(ModelA): 
    is_such_and_such = True 

내가 진짜 부울을 정의하는 것은 좋은 아이디어라고 생각합니다. 나는 또한 특징 기반 것보다는으로 그 일을 할 것

{% if obj.is_such_and_such %} 
    ... 
{% else %} 
    ... 
{% endif %} 

모델 기반 :

최종 결과는 템플릿에 당신이 할 수 있다는 것입니다. Django 님의 자신의 User 모델에 대해 is_staff 님의 모델을 생각해보십시오. 거기에 별도의 클래스를 사용하지는 않지만 아이디어가 적용됩니다. 템플리트에 표시되는 내용이 백엔드에서 구현을 전혀 모르는 사람에게 적합하다는 것을 확인하십시오.

관련 문제