2011-06-09 102 views
0

我繼承了另一個開發應用程序......然後......擴展和加載正確的內容類型與Django模型

class LowLevelModel(models.Model): 
content = models.TextField() 

def get_absolute_url(self): 
    from foo.pages.models import DynamicPage 
    from django.contrib.contenttypes.models import ContentType 
    my_type = ContentType.objects.get_for_model(self)  
    try: 
    dynamic_page = DynamicPage.objects.get(content_type=my_type) 
    return "%s%s/" % (dynamic_page.get_absolute_url(), self.slug) 
    except DynamicPage.DoesNotExist: 
    return "/resources/" 
class HighLevelModel(LowLevelModel): 
def get_absolute_url(self): 
    from foo.pages.models import DynamicPage 
    from django.contrib.contenttypes.models import ContentType 
    my_type = ContentType.objects.get_for_model(self)  
    try: 
    dynamic_page = DynamicPage.objects.get(content_type=my_type) 
    return "%s%s/" % (dynamic_page.get_absolute_url(), self.slug) 
    except DynamicPage.DoesNotExist: 
    return "/resources/" 

class ResourceFeed(Feed): 
title="Something awesome" 
link = '/resources/' 
def items(self): 
    return LowLevelModel.objects.order_by('pub_date').reverse()[:5] 

當然,這可能會返回LowLevelModel絕對URL,我想知道是否有人知道調用LowLevelModel.objects的廉價方式,而無需循環所有擴展模型以獲取網站上的正確位置。

回答

1

我不知道你是否在找什麼,但是我在github https://github.com/anthony-tresontani/django-subclass上寫了一個叫做django_subclass的小奇怪擴展,當你調用基類管理器時,它允許找回正確的對象類(LowLevel ... in這種情況下)

你只需要註冊你的子類模型,它會爲你處理與外部內容類型。