我正在尝试为我的管理员视图定义代理模型,并让它只显示具有一定数量外键值的对象。
这就是我正在尝试的,但我无法过滤yVotes:
class Post(models.Model):
title = models.CharField(max_length=512)
class PostVote(models.Model):
post = models.ForeignKey(Post)
vote = models.CharField(max_length=1)
class VotedPost(models.Post):
def _yVotes(self):
return models.PostVote.objects.filter(post=self, vote='Y').count()
yVotes = property(_yVotes)
class Meta:
proxy = True
class VotedPostAdmin(PostAdmin):
list_display = ('title', 'yVotes')
def queryset(self, request):
return self.model.objects.filter(yVotes__gt=0)
所以我的最终结果是当您浏览VotedPost的/ admin页面时,它只会显示超过0'Y'投票的帖子。在VotedPostAdmin中注释掉查询集时,yVotes的正确值将显示在list_display中。
提前致谢!
答案 0 :(得分:2)
这是迄今为止我最终得到的解决方案,以便为我提供所需的结果。如果有人有更优雅的解决方案,我会等待接受:
class VotedPostAdmin(PostAdmin):
list_display = ('title', 'yVotes')
def queryset(self, request):
return VotedPost.objects.all().annotate(count = Count('postvote')).order_by('-count').filter(count__gt=0).filter(postvote__vote='Y')
答案 1 :(得分:1)
为什么不覆盖get_queryset或使用管理过滤器来创建此类显示。你正在尝试的东西似乎过于复杂tbh
class PostAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(ThisAdmin, self).queryset(request)
# do stuff and return whatever