2012-10-13 74 views
0

我有一個模型,其中有一個active字段,我想過濾掉所有非活動的基於此字段的記錄。比方說:QuerySet自動/方面過濾

Record(Model): 
    active = BooleanField() 
    ... 

將它們過濾出來,我可以做:

Record.objects(active=True) 

但它是一個一般的情況下,我想被過濾掉無用的記錄幾乎任何時候。遵循DRY原則的最佳方式是什麼,並且不要像我上面的示例那樣手動過濾每個請求,同時保持管理面板中管理非活動記錄的能力。

回答

1

您可以使用Managers實現這一任務:

# First, define the Manager subclass. 
class ActiveManager(models.Manager): 
    def get_query_set(self): 
     return super(ActiveManager, self).get_query_set().filter(active=True) 

# Then hook it into the Record model explicitly. 
class Record(models.Model): 
    active = BooleanField() 

    objects = models.Manager() # The default manager. 
    active_objects = ActiveManager() # The specific manager. 

#to filter for all active records you can do: 
Record.active_objects.all() 
+0

哇感謝。正是我在找的東西;) – yakxxx

+0

很高興爲您提供幫助。 –