【问题标题】:Making a CharField use a PasswordInput in the admin让 CharField 在管理员中使用 PasswordInput
【发布时间】:2010-05-11 13:20:27
【问题描述】:

我有一个 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 类、ModelAdminModelForm,但似乎无法弄清楚如何让 django 将该表单显示为密码输入...

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    the docs,您可以构建自己的表单,如下所示:

    from django.forms import ModelForm, PasswordInput
    
    class TwitterUserForm(ModelForm):
        class Meta:
            model = TwitterUser
            widgets = {
                'password': PasswordInput(),
            }
    

    或者你可以这样做like this:

    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)
    

    【讨论】:

    • 我也想说第一个,我不确定第二个版本的密码清除方法是否相同。
    • 谢谢,我确实在文档中看到了这一点,但忘记将, TwitterUserAdmin 添加到admin.site.register 行,所以它显然不能正常工作。谢谢!
    • @Paul - 没问题,很高兴我能帮上忙!
    • 当我尝试在不更改密码的情况下编辑对象时,我得到“此字段是必需的”。
    猜你喜欢
    • 2011-10-17
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 2021-04-15
    • 2013-12-25
    • 2014-05-14
    • 1970-01-01
    相关资源
    最近更新 更多