2012-04-04 99 views
0

所以django-model-utils很棒。
我在django 1.3上,試圖使用繼承管理器。django-model-utils,繼承和模板

我想做到的是:
- 一個QuerySet捕捉到所有的子類
- 通過這個查詢集到模板
- 遍歷這個查詢集,但對待每一OBJ不同,這取決於具體子類

回吐從文檔的例子,如果我這樣做:

nearby_places = Place.objects.filter(location='here').select_subclasses() 

有一次,我在一個模板是有沒有辦法,我知道每個nearby_places的是,所以我可以做不同的東西與它?例如

{% for np in nearby_places %} 
{% if np is a restrautant %} 
# do this 
{% elif np is a bar %} 
# do this 
{% endif %} 
{% endfor %} 

我能想到的,現在唯一的事情是,如果在每個子類我我這樣定義

def is_restaurant() 
    return True 

def is_bar() 
    return True 

etc 

的方法是否有這樣做的其他一些更優雅的方式?

回答

1

您可以添加一個模型的方法,如:

def classname(self): 
    # can't access attributes that start with _ in a template 
    return self.__class__.__name__ 

然後:

{% if np.classname == 'Restaurent' %} 
{% endif %} 

{% if np.classname == 'Bar' %} 
{% endif %} 

etc, etc... 
+0

甜蜜。看起來我想要什麼。謝謝。 – 2012-04-04 07:13:58

+0

只需將模型本身需要的邏輯添加到模型中,因爲您已經有了很好的子類。 例如,使用get_html_description之類的方法或任何你需要的方法。 – joshua 2013-03-12 20:01:04