Django no admite la obtención de valores de clave foránea de list_display o list_filter (por ejemplo, foo__bar). Sé que puede crear un método de módulo como una solución para list_display, pero ¿cómo voy a hacer lo mismo para list_filter? Gracias.Django: list_filter y campos de clave externa
Respuesta
Bueno, los documentos dicen que puede puede usar ForeignKey
tipos de campo en list_filter
:
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter
Un ejemplo:
# models.py:
class Foo(models.Model):
name = models.CharField(max_length=255)
def __unicode__(self):
return self.name
class Bar(models.Model):
name = models.CharField(max_length=255)
foo = models.ForeignKey(Foo)
# admin.py:
class BarAdmin(admin.ModelAdmin):
list_filter = ('foo')
Si desea filtrar por un campo de la relacionada modelo, hay un parche en el camino para hacer que esto funcione (probablemente se fusionará en 1.2 como parece):
Gracias. Aunque estoy buscando una solución y no un parche. Perdón por no haber especificado eso. – Dan
Esta característica ya no funciona. Los campos de clave externa simplemente no aparecen en la barra lateral, es como si no los especificara. –
Si construye la URL para la lista de cambios manualmente, entonces Django no tiene problemas para seguir las relaciones. Por ejemplo:
/admin/contact/contact/?participant__event=8
o
/admin/contact/contact/?participant__event__name__icontains=er
Ambos funcionan bien (aunque este último no añadir 'distinta()', así que puede tener duplicados, pero eso no será por lo general un problema para los filtros)
Así que solo tiene que agregar algo a la página que crea los enlaces correctos. Puede hacer esto ya sea anulando la plantilla de la lista de cambios o escribiendo una filterspec personalizada. Hay varios ejemplos que encontré en Google - particularmente en Django Snippets
Me encontré con el mismo problema y realmente necesitaba una solución. Tengo una solución que te permite crear un filtro en una propiedad de modelo relacionada con FK. Incluso puede atravesar más de una relación FK. Crea una nueva subclase FilterSpec que subclasifica el valor predeterminado de RelatedFilterSpec utilizado para darle un filtro en un campo ForeignKey.
solución de esta página trabajó para mí http://www.hoboes.com/Mimsy/hacks/fixing-django-124s-suspiciousoperation-filtering/
definen
class SmarterModelAdmin(admin.ModelAdmin):
valid_lookups =()
def lookup_allowed(self, lookup, *args, **kwargs):
if lookup.startswith(self.valid_lookups):
return True
return super(SmarterModelAdmin, self).lookup_allowed(lookup, *args, **kwargs)
continuación, permiten la búsqueda de cierto campo de clave externa
class PageAdmin(SmarterModelAdmin):
valid_lookups = ('parent')
Por "('parent')" quiere decir "tuple ('parent')". De lo contrario, elimine los corchetes. –
Usted puede crear fácilmente filtros personalizados desde Djang o 1.4 anulando la clase django.contrib.admin.SimpleListFilter
.
Más información:
Django soporta list_filter con los campos de clave externa
# models.py:
class Foo(models.Model):
name = models.CharField(max_length=255)
def __unicode__(self):
return self.name
class Bar(models.Model):
name = models.CharField(max_length=255)
foo = models.ForeignKey(Foo)
# admin.py:
class BarAdmin(admin.ModelAdmin):
list_filter = ('foo__name')
De la documentación: Los nombres de campo en list_filter también pueden abarcar las relaciones utilizando el __ de búsqueda
Esta es la solución que funcionó para mí, usando Django 1.6. – Pengo
- 1. ¿Cómo ordenar etiquetas list_filter para filtros de clave externa en Django admin?
- 2. Filtro Django Admin en la propiedad Clave externa
- 3. clave externa genérica Django y select_related
- 4. clave externa de django guardar
- 5. Guardar nueva clave externa con forma Django
- 6. Django: filtrado de propiedades de clave externa
- 7. Django serializar objetos de clave externa
- 8. clave externa de Django: obtener modelo relacionado?
- 9. django admin datos de campo de clave externa agregue
- 10. Django- Obtener modelo de clave externa
- 11. Django-Admin: atributo list_filter de UserProfile
- 12. diferencias entre "clave externa" y "restricción de clave externa"
- 13. Django admin, ocultar + signo más en campo de clave externa
- 14. Django: UserProfile con clave externa única en Django Admin
- 15. Los modelos de Django filtran por la clave externa
- 16. Django objeto de modelo con la creación de clave externa
- 17. "Add New" para campo de clave externa en ModelForm Django
- 18. Django: Comprobar si el atributo de clave externa se establece
- 19. Solicitar Django resultados de la consulta por la clave externa
- 20. obtener objetos de clave externa en una sola consulta - Django
- 21. Referenciar restricciones de clave externa y eliminar
- 22. Clave primaria múltiple de ScalaQuery y clave externa
- 23. Cómo modelar una clave externa en una aplicación Django reutilizable?
- 24. ¿Cómo se usa la clave externa dinámica en Django?
- 25. Django obtener objetos no referenciados por clave externa
- 26. más de 1 clave externa
- 27. Django: ¿Cómo creo una clave externa sin un nombre relacionado?
- 28. Django queryset con la filtración en el reverso clave externa
- 29. Permitir nulo en clave externa al usuario. Django
- 30. Django, filtro usuarios por grupo en una clave externa modelo
parece que Django utilizado para apoyar esta función antes de la versión 1.2. 4. No sé por qué lo deshabilitaron ahora. –