在Django中的文本字段上禁用自动完成?

Posted

技术标签:

【中文标题】在Django中的文本字段上禁用自动完成?【英文标题】:Disable autocomplete on textfield in Django? 【发布时间】:2011-02-04 13:47:58 【问题描述】:

有谁知道如何在 Django 中关闭文本字段的自动完成功能?

例如,我从我的模型生成的表单有一个信用卡号的输入字段。保持自动完成是不好的做法。手工制作表单时,我会添加一个 autocomplete="off" 语​​句,但是您如何在 Django 中这样做并且仍然保留表单验证?

【问题讨论】:

【参考方案1】:

在您的表单中,指定要用于该字段的小部件,并在该小部件上添加attrs 字典。例如(直接来自django documentation):

class CommentForm(forms.Form):
    name = forms.CharField(
                widget=forms.TextInput(attrs='class':'special'))
    url = forms.URLField()
    comment = forms.CharField(
               widget=forms.TextInput(attrs='size':'40'))

只需将 'autocomplete': 'off' 添加到 attrs 字典即可。

【讨论】:

谢谢!我在你回答前 1 分钟发现了这个……这不是一直这样吗?! 这在 Chrome 中对我不起作用。即使 autocomplete=off,它仍然会自动完成用户名和密码字段。 看看这个问题:***.com/questions/15738259/disabling-chrome-autofill 既然attrs 是字典,它应该是'autocomplete': 'off' 只是为了轻松找到答案:@codescribblr 共享的链接建议将“off”替换为“new-password”。为我工作(而所有其他解决方案都没有)【参考方案2】:

将 autocomplete="off" 添加到表单标签中,这样您就不必更改 django.form 实例。

<form action="." method="post" autocomplete="off"> form </form>

【讨论】:

我如何通过 ModelAdmin 应用它?【参考方案3】:

如果您要定义自己的表单,您可以在表单中的字段中添加属性。

class CommentForm(forms.Form):
    name = forms.CharField(widget=forms.TextInput(attrs=
        'autocomplete':'off'
    ))

如果您使用的是模型表单,您将无法在表单中定义字段属性。但是,您可以使用__init__ 添加所需的属性。

class CommentForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(CommentForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget.attrs.update(
            'autocomplete': 'off'
        )

您也可以从Meta添加属性

class CommentForm(forms.ModelForm):
    class Meta:
        widgets = 
            'name': TextInput(attrs='autocomplete': 'off'),
        

【讨论】:

【参考方案4】:

对我来说,在模板中添加额外的属性也有效:

<form method="POST", autocomplete="off">
    % csrf_token %
     form.as_p `

【讨论】:

以及我如何使用 ModelAdmin 以自动生成的形式应用它?【参考方案5】:

如果您使用 django 内置表单(例如登录表单或 usercreationform)而不是您自己的自定义模型表单,那么您必须在 javascript 中删除自动完成

const username = document.getElementById("id_username");
username.autocomplete = "off"

【讨论】:

以上是关于在Django中的文本字段上禁用自动完成?的主要内容,如果未能解决你的问题,请参考以下文章

禁用三星键盘上的文本预测

在 select2 上禁用“未找到匹配项”文本和自动完成

在 django 中使用 JQuery 自动完成小部件

iOS Safari 如何禁用类似自动完成的功能

通过 CSS 禁用自动完成

如何防止浏览器列出输入字段的建议(不一定与禁用自动完成/自动填充相同)?