这是我在这里的第一篇文章,我是django的初学者,我几乎阅读了William S. Vincent的django for beginners,在第8章中,他回顾了自定义用户模型,并为所需的表单创建了以下代码:
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm):
model = CustomUser
fields = UserCreationForm.Meta.fields + ("age",)
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = UserChangeForm.Meta.fields
我的问题是为什么我们在这里使用类 meta,为什么第一个类Meta继承自“UserCreationForm”,而第二个类Meta不继承。谢谢!
1条答案
按热度按时间yxyvkwin1#
我的问题是为什么我们在这里使用类 meta,为什么第一个类Meta继承自“UserCreationForm”,而第二个类Meta不继承。
可能是打印错误,应该是:
通常来说,* 总是 * 从超类的
Meta
中插入是一个好主意,因为在这种情况下,它还包含field_classes
属性[GitHub]:它在这里为用户名添加了一个特定的字段类,而不是默认的
CharField
.如果我们希望这个行为继续,那么我们需要继承它,否则我们的Meta
没有这样的field_classes
项,它将因此“后退”到一个简单的CharField
.后者更好,只需简单地说:
因为对于现代版本的Django,它也会使用
UsernameField
字段类。