Заставить CharField использовать PasswordInput в админке - PullRequest
10 голосов
/ 11 мая 2010

У меня есть сайт Django, на котором администратор сайта вводит свои имя пользователя и пароль Twitter, чтобы использовать API Twitter. Модель настроена так:

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

Мне нужен сайт администратора для отображения поля password в качестве ввода пароля, но, похоже, не могу понять, как это сделать. Я пытался использовать класс ModelAdmin, ModelAdmin с ModelForm, но не могу понять, как заставить django отображать эту форму в качестве ввода пароля ...

1 Ответ

21 голосов
/ 11 мая 2010

Из документов , вы можете создать свою собственную форму, примерно так:

from django.forms import ModelForm, PasswordInput

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

Или вы можете сделать это вот так :

from django.forms import ModelForm, PasswordInput

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

Я понятия не имею, какой из них лучше - я немного предпочитаю первый, поскольку это означает, что вы все равно получите help_text и verbose_name от вашей модели.

Независимо от того, какой из этих двух подходов вы используете, вы можете заставить администратора использовать вашу форму следующим образом (в приложении admin.py):

from django.contrib import admin

class TwitterUserAdmin(admin.ModelAdmin):
    form = TwitterUserForm

admin.site.register(TwitterUser, TwitterUserAdmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...