【问题标题】:Django 1.8 : Filter query_set in overriden method get_query_set() of ModelAdminDjango 1.8:在 ModelAdmin 的覆盖方法 get_query_set() 中过滤 query_set
【发布时间】:2016-03-26 10:07:31
【问题描述】:

考虑一个类和一个代理:

class EchangeVoisin(VoisinModel):
    class Meta(VoisinModel.Meta):
        pass
...
    typeechange = models.SmallIntegerField(choices = TYPEECHANGE, verbose_name = 'Type')
...

class PropositionDon(EchangeVoisin):
    class Meta(EchangeVoisin.Meta):
        proxy = True;
    def __init__(self, *args, **kwargs):
        super(EchangeVoisin, self).__init__(*args, **kwargs)
        self.typeechange = self.TYPEDON

过滤器在外壳中工作正常:

>>> EchangeVoisin.objects.all()
[<EchangeVoisin: Livre de recettes>, <EchangeVoisin: des chaussures de sécurité>, <EchangeVoisin: Sac à main>]
>>> EchangeVoisin.objects.all().filter(typeechange=EchangeVoisin.TYPEDON)
[<EchangeVoisin: Sac à main>]
>>>

>>> PropositionDon.objects.all()
[<PropositionDon: Livre de recettes>, <PropositionDon: des chaussures de sécurité>, <PropositionDon: Sac à main>]
>>> PropositionDon.objects.filter(typeechange = 0)
[<PropositionDon: Sac à main>]

但不是在ModelAdmin中,查询集没有过滤,网格包含所有记录...

class EchangeAdmin(admin.ModelAdmin):
...
...
    pass

class PropositionDonAdmin(EchangeAdmin):
...
...
    def get_queryset(self, request):
        qs = super(PropositionDonAdmin,self).get_queryset(request)
        qs.filter(donateur = None)
        return qs
    pass

我确定调用了覆盖的方法,似乎框架没有使用返回的查询集......有什么问题

非常感谢您的帮助!

【问题讨论】:

    标签: python django python-3.x django-admin


    【解决方案1】:

    filter 不会改变调用它的查询集,它会返回一个新的。您需要返回新的查询集:

    def get_queryset(self, request):
        qs = super(PropositionDonAdmin,self).get_queryset(request)
        qs = qs.filter(donateur = None)
        return qs
    

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 2013-08-27
      • 2015-12-24
      • 1970-01-01
      • 2016-05-24
      • 2011-06-18
      • 2012-07-21
      • 1970-01-01
      相关资源
      最近更新 更多