2012-09-08 7 views
14

Pregunta de Newbie Django: me gustaría que el administrador de Django muestre más filas de opciones en el widget de selección múltiple. Tengo una lista extremadamente larga para seleccionar y las 4 filas predeterminadas simplemente no son convenientes, especialmente cuando se desplaza.Anulación del tamaño del widget de selección múltiple de Django Admin

En este momento, ese widget se representa como seleccionar varios pero me gustaría que fuera seleccione el tamaño de múltiples = "12". Idealmente, esto debería ser para campos específicos, pero puedo vivir con todos los campos con el mismo atributo de tamaño.

Entonces, ¿dónde sería el lugar óptimo en Django para cambiar eso?

Respuesta

13

Si tiene una selección larga que seguirá creciendo, le recomiendo usar un autocomplete widget.

De todos modos, usted podría:

  1. Create a ModelForm, para el modelo en cuestión

  2. Override the default widget, para el campo en cuestión,

  3. Set widget's size attribute a su necesita

  4. Enable that form in ModelAdmin, por ejemplo

    class YourModelForm(forms.ModelForm): 
        class Meta: 
         model = YourModel 
         widgets = { 
          'your_field': forms.SelectMultiple(attrs={'size': 12}) 
         } 
    
    
    class YourModelAdmin(admin.ModelAdmin): 
        form = YourModelForm 
    
19

lo hice en el admin.py mediante el establecimiento de un tamaño general para todos los artículos ManyToManyField, por ejemplo:

from django.contrib import admin 
from django.forms import SelectMultiple 
from django.db import models 
from models import * 

class RiverAdmin(admin.ModelAdmin): 
    formfield_overrides = { models.ManyToManyField: {'widget': SelectMultiple(attrs={'size':'10'})}, } 

admin.site.register(River, RiverAdmin) 
+0

+1 por simplicidad – JeffC

+2

Tenga en cuenta que esto no va a funcionar si '' filter_horizontal' o filter_vertical' se establece para los campos correspondientes de 'RiverAdmin'. He pasado un tiempo para resolver esto. –

0

I fue capaz de hacer un número de filas según el número inicial de filas de tablas relacionadas, sin embargo, no se actualiza dinámicamente (probablemente necesite insertar Javascript en el administrador para my consulta el número de filas a través de AJAX, que sería demasiado grande para publicar aquí).

class ProfileAdminForm(forms.ModelForm): 
    class Meta: 
     model = Profile 
     fields = '__all__' 
     widgets = { 
      # Will dynamically change number of rows in select multiple, however only after server reload. 
      'spec_profiles': forms.SelectMultiple(attrs={'size': SpecProfile.objects.count()}) 
     } 

class ProfileAdmin(admin.ModelAdmin): 
    form = ProfileAdminForm 
Cuestiones relacionadas