2010-02-17 51 views
12

De manera predeterminada, el sitio de administración de Django muestra todos los registros de un modelo/tabla relacionado para su visualización. ¿Cómo puedo mostrar solo los registros que cumplen ciertos criterios?¿Cómo limitar queryset/los registros para ver en el sitio de administración de Django?

+0

¿Quiere decir de forma predeterminada, o simplemente desea que esa opción esté disponible en la página de lista de cambios? –

+0

Por defecto. Cada vez que cargo la página, muestra solo registros que significan algunos requisitos. Esos requisitos se pueden cambiar en el back-end. – Viet

+0

Y también, ¿cómo hacer que aparezcan en la página de la lista de cambios? – Viet

Respuesta

25

En su definición de administrador, puede definir un método queryset() que devuelve el conjunto de consulta para el administrador de ese modelo. por ejemplo:

class MyModelAdmin(admin.ModelAdmin): 
    def queryset(self, request): 
     qs = super(MyModelAdmin, self).queryset(request) 
     return qs.filter(user=request.user) 

Entonces sólo los objetos con user=request.user serán visibles en el admin.

+1

+1 ¡Estoy tan feliz de ver esto y resultó ser tan simple! ¡Gracias! – Viet

+0

Pero de esta manera, no es posible obtener consultas adicionales para otros usuarios si desea buscar eso. Entonces no responde la pregunta de la forma en que la leo. –

+9

Dado que Django 1.6 'queryset' ha sido reemplazado por' get_queryset' – peter2108

3

Sé que esto tiene una "respuesta aceptada", pero quería dejar esto ahí desde que encontré esta respuesta mientras buscaba otra cosa y me di cuenta de que tenía una solución alternativa que encontré y uso a menudo que me da más control de nivel granular que la respuesta aceptada.

class TestAdmin(admin.ModelAdmin): 
    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
     if db_field.name == "FIELD": 
      kwargs["queryset"] = TestModel.objects.filter(test=False) 
     return super(TestAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

    def formfield_for_manytomany(self, db_field, request, **kwargs): 
     if db_field.name == "FIELDS": 
      kwargs["queryset"] = TestModel.objects.filter(test=False) 
     return super(TestAdmin, self).formfield_for_manytomany(db_field, request, **kwargs) 
+0

¡Mira lo que pasó allí! Su respuesta fue buena ... la tuya fue mejor. Sterling trabajo. –

Cuestiones relacionadas