2011-01-21 14 views
7

Per impostazione predefinita, desidero solo restituire istanze "pubblicate" (pubblicate = True). È possibile sovrascrivere .objects in modo che MyModel.objects.all() restituisca effettivamente MyModel.objects.filter (pubblicato = True)?È possibile sovrascrivere .oggetti su un modello django?

È ragionevole? Come potrei ottenere quelli non pubblicati nei rari casi in cui li volevo?

risposta

15

È possibile eseguire questa operazione scrivendo un'annotazione Manager - basta sovrascrivere il metodo get_queryset e impostare objects in un'istanza di Manager. Per esempio:

class MyModelManager(models.Manager): 
    def get_queryset(self): 
     return super(MyModelManager, self).get_queryset().filter(published=True) 

class MyModel(models.Model): 
    # fields 
    # ... 

    objects = MyModelManager() 

Vedere la docs per i dettagli. È ragionevole che questo sia il tuo solito caso predefinito. Per non essere pubblicato, crea un altro gestore a cui puoi accedere con qualcosa come MyModel.unpublished_objects. Ancora una volta, i documenti hanno esempi su questo tipo di cose.

+0

MIO salvatore !!! Grazie! –

Problemi correlati