Quería ampliar la respuesta de Carl Meyer, que funciona perfectamente hasta esta fecha.
Siempre uso TextField
en lugar de CharField
(con o sin opciones) e impongo límites de caracteres en el lado de UI/API en lugar de a nivel de base de datos. Para hacer este trabajo de forma dinámica:
from django import forms
from django.contrib import admin
class BaseAdmin(admin.ModelAdmin):
"""
Base admin capable of forcing widget conversion
"""
def formfield_for_dbfield(self, db_field, **kwargs):
formfield = super(BaseAdmin, self).formfield_for_dbfield(
db_field, **kwargs)
display_as_charfield = getattr(self, 'display_as_charfield', [])
display_as_choicefield = getattr(self, 'display_as_choicefield', [])
if db_field.name in display_as_charfield:
formfield.widget = forms.TextInput(attrs=formfield.widget.attrs)
elif db_field.name in display_as_choicefield:
formfield.widget = forms.Select(choices=formfield.choices,
attrs=formfield.widget.attrs)
return formfield
tengo un nombre de modelo, donde Post
title
, slug
& state
son TextField
s state
y tiene opciones.La definición de administrador se ve así:
@admin.register(Post)
class PostAdmin(BaseAdmin):
list_display = ('pk', 'title', 'author', 'org', 'state', 'created',)
search_fields = [
'title',
'author__username',
]
display_as_charfield = ['title', 'slug']
display_as_choicefield = ['state']
Pensamos que a los demás que busquen respuestas les puede resultar útil.
¡La respuesta aceptada es una gran exageración con el único propósito de modificar un campo! LAS PERSONAS SIGUEN ESTA RESPUESTA POR Carl Meyer PARA EL PROPÓSITO DE LA SIMPLICIDAD: http://stackoverflow.com/questions/430592/django-admin-charfield-as-textarea#431412 – andi