只有使用django-models-utils的父类

时间:2015-09-01 19:50:53

标签: django django-models django-views

我使用django-models-utils来获得班级的所有孩子。我已经取得了成功,但现在我似乎无法仅通过父类获得视图。

这是主要课程,其他课程用于评论:

class Post(models.Model):
    author = models.ForeignKey(User, null=True, blank=True)
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200, unique=True, blank=True)
    text = models.TextField()
    notable = models.BooleanField(default=False)
    created = models.DateTimeField(editable=False, auto_now_add=True)
    published = models.DateTimeField(null=True, blank=True)
    modified = models.DateTimeField(editable=False, auto_now=True)
    tags = models.ManyToManyField(Tag, blank=True)

    objects = InheritanceManager()

这是适用于所有帖子(包括孩子)的视图:

def all_posts(request):
    posts = Post.objects.order_by('published').filter(published__lte=timezone.now()).select_subclasses()
    return render(request, 'blog/post_list.html', {'posts': posts})

这是仅针对帖子的观点(不是评论,而不是儿童),但这并不适用于我收到所有帖子:

class RamblingList(ListView):
    context_object_name = 'ramblings'
    queryset = Post.objects.filter(published__lte=timezone.now()).order_by('published')
    template_name = 'blog/rambling_list.html' 

有人能告诉我,我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

InheritanceManager不应该这样做。如果在不调用select_subclasses()的情况下调用任何过滤器,它将返回没有子类强制转换的所有对象。

文档中很清楚:http://django-model-utils.readthedocs.org/en/latest/managers.html#inheritancemanager

  

但是当你遍历nearby_places时,你只会得到Place实例,即使是“真正的”餐馆或酒吧的对象

你可以做这样的事情来达到预期的效果:

queryset = Post.objects.filter(
    published__lte=timezone.now()
).order_by('published').select_subclasses()
queryset = [x for x in queryset if type(x) == Post]