0

我正在尝试为我的管理视图定义一个代理模型,并让它只显示具有一定数量外键值的对象。

这是我正在尝试的,但我无法过滤 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 中。

提前致谢!

4

2 回答 2

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')
于 2012-07-13T21:03:22.297 回答
1

为什么不覆盖 get_queryset 或使用管理过滤器来创建这样的显示。你正在尝试做的事情似乎过于复杂 tbh

class PostAdmin(admin.ModelAdmin):
    def queryset(self, request):
        qs = super(ThisAdmin, self).queryset(request)
        # do stuff and return whatever
于 2012-07-13T15:56:41.100 回答