Django tende a preencher espaço horizontal ao adicionar ou editar entradas no admin, mas, em alguns casos, é um verdadeiro desperdício de espaço, quando, ou seja, editar um campo de data, de 8 caracteres de largura, ou um CharField, também de 6 ou 8 caracteres de largura, e a caixa de edição sobe para 15 ou 20 caracteres.
Como posso dizer ao administrador a largura de uma caixa de texto ou a altura de uma caixa de edição TextField?
Respostas:
Você deve usar ModelAdmin.formfield_overrides .
É muito fácil - em
admin.py
, defina:fonte
filter_horizontal
oufilter_vertical
for definido para os campos correspondentes em YourModelAdmin. Passei algum tempo tentando descobrir isso.models.TextField: {'widget': Textarea(attrs={'rows':4})}
mas a largura também ficou menor.Você pode definir atributos HTML arbitrários em um widget usando sua propriedade "attrs" .
Você pode fazer isso no administrador do Django usando formfield_for_dbfield:
ou com uma subclasse de widget customizada e o dicionário formfield_overrides :
fonte
Para alterar a largura de um campo específico.
Feito via ModelAdmin.get_form :
fonte
Uma opção rápida e suja é simplesmente fornecer um modelo personalizado para o modelo em questão.
Se você criar um modelo denominado
admin/<app label>/<class name>/change_form.html
, o administrador usará esse modelo em vez do padrão. Ou seja, se você tiver um modelo nomeadoPerson
em um aplicativo denominadopeople
, você criará um modelo denominadoadmin/people/person/change_form.html
.Todos os modelos de administração têm um
extrahead
bloco que você pode sobrescrever para colocar coisas no<head>
, e a peça final do quebra-cabeça é o fato de que cada campo tem um ID HTML deid_<field-name>
.Então, você pode colocar algo como o seguinte em seu modelo:
fonte
Se desejar alterar os atributos em uma instância por campo, você pode adicionar a propriedade "attrs" diretamente nas entradas do formulário.
por exemplo:
A propriedade "attrs" basicamente transmite a marcação HTML que ajustará o campo do formulário. Cada entrada é uma tupla do atributo que você gostaria de substituir e o valor que você gostaria de substituir. Você pode inserir quantos atributos desejar, contanto que separe cada tupla com uma vírgula.
fonte
A melhor maneira que encontrei é algo assim:
É muito melhor para ModelForm do que substituir campos com widgets diferentes, pois preserva
name
ehelp_text
atribui os valores padrão dos campos do modelo, então você não precisa copiá-los para o seu formulário.fonte
Tive um problema semelhante com TextField. Estou usando Django 1.0.2 e queria alterar o valor padrão para 'linhas' na textarea associada. formfield_overrides não existe nesta versão. Substituir formfield_for_dbfield funcionou, mas eu tive que fazer isso para cada uma das minhas subclasses ModelAdmin ou resultaria em um erro de recursão. Por fim, descobri que adicionar o código abaixo a models.py funciona:
Em seguida, use MyTextField em vez de TextField ao definir seus modelos. Eu adaptei desta resposta a uma pergunta semelhante.
fonte
Está bem descrito no FAQ do Django :
Q: Como altero os atributos de um widget em um campo em meu modelo?
R: Substitua o formfield_for_dbfield na classe ModelAdmin / StackedInline / TabularInline
fonte
Você sempre pode definir os tamanhos dos seus campos em uma folha de estilo personalizada e dizer ao Django para usar isso para a sua classe ModelAdmin:
fonte
para 1.6, usando formulários eu tive que especificar os atributos da textarea dentro do charfield:
fonte
Mesma resposta que msdin, mas com TextInput em vez de TextArea:
fonte
Aqui está uma solução simples, mas flexível. Use um formulário personalizado para substituir alguns widgets.
Os widgets fornecidos em
ElephantForm
irão substituir os padrões. A chave é a representação em string do campo. Os campos não especificados no formulário usarão o widget padrão.Observe que embora
age
seja umIntegerField
, podemos usar oTextInput
widget, porque, ao contrário deNumberInput
,TextInput
aceita osize
atributo.Esta solução é descrita neste artigo .
fonte
Se você estiver trabalhando com um campo ForeignKey que envolve escolhas / opções / um menu suspenso, você pode substituir
formfield_for_foreignkey
na instância de Admin:Mais informações sobre este padrão aqui e aqui .
fonte
E mais um exemplo também:
Se você deseja editar apenas um tamanho de campo específico, você pode usar isso.
fonte