2010-05-11 10 views
8

Tengo un sitio de Django en el que el administrador del sitio ingresa su nombre de usuario/contraseña de Twitter para usar la API de Twitter. El modelo está configurado de esta manera:Haciendo que CharField use PasswordInput en el administrador

class TwitterUser(models.Model): 
screen_name = models.CharField(max_length=100) 
password = models.CharField(max_length=255) 
def __unicode__(self): 
    return self.screen_name 

necesito el sitio de administración para mostrar el campo password como una entrada de contraseña, pero parece que no puede encontrar la manera de hacerlo. He intentado usar una clase ModelAdmin, un ModelAdmin con un ModelForm, pero parece que no puede encontrar la manera de hacer que la pantalla Django que forman como una introducción de la contraseña ...

Respuesta

18

De the docs, usted puede construir su propia forma, algo como esto:

from django.forms import ModelForm, PasswordInput 

class TwitterUserForm(ModelForm): 
    class Meta: 
     model = TwitterUser 
     widgets = { 
      'password': PasswordInput(), 
     } 

O puede hacerlo like this:

from django.forms import ModelForm, PasswordInput 

class TwitterUserForm(ModelForm): 
    password = forms.CharField(widget=PasswordInput()) 
    class Meta: 
     model = TwitterUser 

no tengo idea de cuál es mejor - yo prefiero un poco la primera, ya que significa que usted todavía ge t cualquier help_text y verbose_name de su modelo.

Independientemente de cuál de esos dos enfoques que toma, a continuación, puede hacer que el administrador utilice el formulario como el siguiente (en admin.py de su aplicación):

from django.contrib import admin 

class TwitterUserAdmin(admin.ModelAdmin): 
    form = TwitterUserForm 

admin.site.register(TwitterUser, TwitterUserAdmin) 
+0

También me dicen que vaya para el primero, yo soy no estoy seguro de si el método de limpieza para la contraseña será el mismo en la segunda versión. – KillianDS

+0

Gracias, vi esto en los documentos pero olvidé agregar el ', TwitterUserAdmin' a la línea' admin.site.register', por lo que obviamente no funcionaba correctamente. ¡Gracias! –

+0

@Paul - ¡no hay problema, me alegro de poder ayudar! –

Cuestiones relacionadas