2011-01-21 18 views
7

Me gustaría por defecto solo devolver instancias "publicadas" (publicadas = Verdadero). ¿Es posible sobrescribir .objects para que MyModel.objects.all() realmente devuelva MyModel.objects.filter (published = True)?¿Es posible sobrescribir .objects en un modelo django?

¿Es esto sensato? ¿Cómo obtendría los no publicados en los raros casos en que los quería?

Respuesta

15

Puede hacerlo escribiendo Manager personalizado - simplemente anule el método get_queryset y configure su objects en una instancia del Administrador. Por ejemplo:

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

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

    objects = MyModelManager() 

Consulte el docs para obtener más información. Es sensato si ese será tu caso predeterminado habitual. Para que no se publique, crea otro administrador al que puedas acceder con algo como MyModel.unpublished_objects. Una vez más, los documentos tienen ejemplos sobre este tipo de cosas.

+0

MI salvador !!! ¡Gracias! –

Cuestiones relacionadas