gpt4 book ai didi

django - 覆盖 Django 通用的基于类的 View 小部件

转载 作者:行者123 更新时间:2023-12-03 03:06:53 25 4
gpt4 key购买 nike

假设我有一个基本的 CreateView 表单,如下所示,以允许新用户在网站上注册:

from django.contrib.auth import get_user_model
from django.http import HttpResponse
from django.views.generic import CreateView

User = get_user_model()


class Signup(CreateView):

model = User
fields = ['first_name', 'last_name', 'email', 'password']

我刚刚尝试了这个,发现密码字段以纯文本形式呈现;我将如何覆盖 View 以便它使用 forms.PasswordInput() 代替? (我意识到手动定义表单可能是最简单的,但我只是好奇你会如何做到这一点。)

最佳答案

您可以重写get_form(),并修改表单以更改密码字段上的小部件:

from django import forms

class Signup(CreateView):
model = User
fields = ['first_name', 'last_name', 'email', 'password']

def get_form(self, form_class):
form = super(Signup, self).get_form(form_class)
form.fields['password'].widget = forms.PasswordInput()
return form

但是更好的方法是创建一个自定义表单类。在自定义类中,只需在 Meta 类上设置 widgets 即可。像这样:

from django import forms

class SignupForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'email', 'password']
widgets = {
'password': forms.PasswordInput()
}

class Signup(CreateView):
form_class = SignupForm
model = User

通常您也会将自定义表单类放入 forms.py 文件中。

关于django - 覆盖 Django 通用的基于类的 View 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27321692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com