2011-06-09 134 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这种情况下)

你只需要注册你的子类模型,它会为你处理与外部内容类型。