¿Hay una manera simple de mostrar ManyToManyField como casillas de verificación en Django Admin? ¿Alguna sugerencia?Mostrar ManyToManyField como casillas de verificación en Django Admin
Respuesta
De this answer parece que es posible utilizar ModelAdmin.formfield_overrides para anular el ManyToManyField utilizar CheckBoxSelectMultiple:
from django.db import models
from django.contrib import admin
from django.forms import CheckboxSelectMultiple
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ManyToManyField: {'widget': CheckboxSelectMultiple},
}
Yo no lo he probado y estoy simplemente citando la fuente, pero parece plausible. Buena suerte.
Advertencia: como @errx ha señalado acertadamente, los documentation aspectos más destacados de la siguiente salvedad:
Si desea utilizar un widget encargo con un campo de relación (es decir
ForeignKey
o ManyToManyField), asegúrese de que no hayan incluido el nombre de ese campo enraw_id_fields
oradio_fields
.
formfield_overrides
no le permitirá cambiar el widget en los campos de relación que tienenraw_id_fields
oradio_fields
conjunto. Eso es porqueraw_id_fields
yradio_fields
implican propios widgets personalizados.
hay una advertencia de django docs. Si desea utilizar un widget personalizado con un campo de relación (es decir, ForeignKey o ManyToManyField), asegúrese de no haber incluido el nombre de ese campo en raw_id_fields o radio_fields. formfield_overrides no le permitirá cambiar el widget en los campos de relación que tienen raw_id_fields o radio_fields. Eso es porque raw_id_fields y radio_fields implican widgets personalizados propios. – errx
Gracias por el aviso. Colocará una advertencia en respuesta. –
Creo que no hay una manera simple de hacerlo. Puede intentar anular la clase ModelAdmin, pero esta no es una forma "simple".
Pero puede utilizar filter_horizontal o filter_vertical añadir casi una funcionalidad similar
Esto es ciertamente posible. Aquí está el código que se puede colocar en el ModelAdmin
subclase:
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
if db_field.name == 'your field name':
kwargs['widget'] = form_widgets.CheckboxSelectMultiple()
kwargs['help_text'] = ''
return db_field.formfield(**kwargs)
Esto se deriva de mirar en la clave de administrador.
Para anular para un solo campo de los siguientes es útil:
def get_form(self, request, obj=None, **kwargs):
form = super(VNodeAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['node_type'].widget = forms.CheckboxSelectMultiple()
return form
- 1. django mostrar el contenido de manytomanyfield
- 2. ¿Cómo acceder a ambas direcciones de ManyToManyField en Django Admin?
- 3. En Django, ¿hay alguna manera de mostrar las opciones como casillas de verificación?
- 4. Django admin plantea la verificación CSRF fallida
- 5. cambiar lista mostrar enlace en django admin
- 6. Cómo obtengo múltiples valores de casillas de verificación en Django
- 7. Cómo mostrar las casillas de verificación previamente marcadas en android
- 8. Django Admin + ¿Filtro horizontal?
- 9. Django administración ManyToManyField
- 10. casillas de verificación de pirámide
- 11. Django-Admin: CharField como TextArea
- 12. Django admin - Exportar como CSV
- 13. Casillas de verificación en rieles
- 14. QTreeView Casillas de verificación
- 15. casillas de verificación jQuery
- 16. Django: select_related con ManyToManyField
- 17. Sinatra Web Admin (como administrador de Django)
- 18. Django: muestra ManyToManyField en una plantilla?
- 19. jQuery - casillas de verificación como botones de radio
- 20. JTree con casillas de verificación
- 21. jquery marque casillas de verificación
- 22. ExpandableListView y casillas de verificación
- 23. Administrador personalizado Django con ManyToManyField
- 24. Alinear casillas de verificación (web)
- 25. Casillas de verificación Tristate en Java
- 26. Django admin list_display newline
- 27. Android: ExpandableListViews y casillas de verificación
- 28. Django - búsquedas inversas con ManyToManyField
- 29. ASP.NET MVC Múltiples casillas de verificación
- 30. casillas de verificación serialización en jQuery
Yo sugeriría cambiar la respuesta aceptada, a fin de no confundir a los visitantes. – surfer190