在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中的文本字段上禁用自动完成?的主要内容,如果未能解决你的问题,请参考以下文章