在后台使CharField使用密码输入组件

13 投票
1 回答
14853 浏览
提问于 2025-04-15 22:35

我有一个Django网站,网站管理员需要输入他们的Twitter用户名和密码,以便使用Twitter的API。模型设置如下:

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 个回答

34

根据文档,你可以自己创建一个表单,像这样:

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_textverbose_name

无论你选择哪种方法,你都可以在你的应用的admin.py中让管理员使用你的表单,像这样:

from django.contrib import admin

class TwitterUserAdmin(admin.ModelAdmin):
    form = TwitterUserForm

admin.site.register(TwitterUser, TwitterUserAdmin)

撰写回答