2016-03-26 63 views
0

在覆蓋方法get_query_set過濾query_set()考慮類和代理:Django的1.8:的ModelAdmin

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 

我敢肯定,被覆蓋的方法被調用,它似乎返回不使用框架的查詢集...有任何問題

非常感謝您的幫助!

回答

1

filter不改變它被調用的查詢集,它返回一個新的。您需要返回新的查詢集:

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

謝謝你:return qs.filter ....也可以正常工作! –