Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django ModelManager继承_Django_Django Models - Fatal编程技术网

django ModelManager继承

django ModelManager继承,django,django-models,Django,Django Models,如何继承ModelManager class Content(models.Model): name = models.CharField(max_length=255, verbose_name='Name des Blogs') slug = models.SlugField(max_length=80, blank=True) objects = models.Manager() active = ContentActiveManager() class

如何继承ModelManager

class Content(models.Model):
    name = models.CharField(max_length=255, verbose_name='Name des Blogs')
    slug = models.SlugField(max_length=80, blank=True)
    objects = models.Manager()
    active = ContentActiveManager()

class ContentActiveManager(models.Manager):
    def get_query_set(self):
        return super(ContentActiveManager,self).get_query_set().filter(activated=True,show=True)

class BlogCatalog(Content):
    frequency = models.PositiveSmallIntegerField(max_length=2, choices=make_index_based_tuple(l=FREQUENCY), verbose_name='Frequenz',)



blog = BlogCatalog.active.get(pk=1)
blog
现在显然是一个内容对象。 如果我键入Catalog.active.get(pk=1),我需要一个内容对象,但 如果我键入BlogCatalog.active.get(pk=1),我需要一个BlogCatalog对象


如何在不冗余的情况下实现这一点?

Django只允许从抽象基类继承管理器。要将同一管理器用作非ABC,必须显式声明它

看看这本书

基本上,只要这样做:

class BlogCatalog(Content):
    frequency = models.PositiveSmallIntegerField(max_length=2, choices=make_index_based_tuple(l=FREQUENCY), verbose_name='Frequenz',)
    active = ContentActiveManager()

希望能有所帮助。

我唯一能想到的办法是:

class Content:

    @staticmethod
    def __new__(cls, *args, **kwargs):
        super_new = super(Content, cls).__new__(cls, *args, **kwargs)
        cls.add_to_class('active', ContentActiveManager())
        return super_new

是的,谢谢你。问题是,我一直认为我的想法不可能是解决这个问题的最明智的方式:-/。我想给BlogCatalog一个ContentActiveManager,但我不确定这是否被认为是“好代码”。谢谢你的帮助:)。是的,django开发人员就是这样安排的。因此,只要内容不是ABC,这被认为是做事的“正确”方式;-)