我使用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'
有人能告诉我,我做错了什么吗?
答案 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]