2011-11-22 7 views
6

Me gustaría limitar las opciones de una clave externa en la interfaz de usuario de administrador utilizando limit_choices_to; sin embargo, me gustaría lograr esto sin cambiar el modelo, ya que el modelo proviene de una biblioteca y no tengo control sobre él. ¿Cuál es la forma de lograr esto dinámicamente? ¿O podría usar un campo en el modelo de administrador para poder lograr esto?Limitación de las opciones de administración mediante limit_choices_to

Gracias, --Eytan

Respuesta

11

Django provee un gancho de administración para modificar una clave externa queryset: formfield_for_foreignkey

class MyModelAdmin(admin.ModelAdmin): 
    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
     if db_field.name == "car": 
      kwargs["queryset"] = Car.objects.filter(owner=request.user) 
     return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 
+0

Gracias mucho Yuji! Esto me ayudó a lograr lo que estaba buscando. Creo que la forma correcta de hacerlo sería mediante la personalización de ModelForm para ModelAdmin, pero esto definitivamente es más fácil :) – daniyalzade

+0

@daniyalzade no hay problema! Esta es la forma correcta, o ¿por qué más está en la documentación de administración de django? Anular el atributo 'form' se debe hacer cuando los métodos proporcionados por django no son suficientes:) Mis 2 centavos. –

Cuestiones relacionadas