Django自定义用户模型提交注册表单报Manager isn't available错误求助
问题原因
- 表单继承逻辑错误:
UserCreationForm是Django原生专门用于用户模型的注册表单,你在表单的Meta类中错误将model指定为业务模型Consumer/Workman,而非你自定义的accounts.User模型,导致表单内部调用默认auth.User的管理器触发报错。 - 类名拼写错误:表单内部的配置类名应该是大写开头的
Meta,你写成了小写的meta,导致自定义配置完全不生效,表单会继承UserCreationForm默认绑定的auth.User模型。
解决方案
1. 修正forms.py代码
调整表单的绑定模型,重写save方法同步创建业务侧的Consumer/Workman实例:
from django.contrib.auth.forms import UserCreationForm from django import forms from .models import User, Consumer, Workman class ConsumerCreationForm(UserCreationForm): location = forms.CharField(max_length=100, required=False) # 正确配置大写的Meta类,绑定自定义用户模型 class Meta(UserCreationForm.Meta): model = User # 可根据需求扩展需要填写的用户字段 fields = UserCreationForm.Meta.fields + ('email',) # 重写save方法同步创建消费者实例 def save(self, commit=True): user = super().save(commit=False) user.is_consumer = True user.type = User.Types.CONSUMER if commit: user.save() Consumer.objects.create(user=user, location=self.cleaned_data.get('location')) return user class WorkmanCreationForm(UserCreationForm): contact = forms.CharField(max_length=100) class Meta(UserCreationForm.Meta): model = User fields = UserCreationForm.Meta.fields + ('email',) # 重写save方法同步创建工人实例 def save(self, commit=True): user = super().save(commit=False) user.is_workman = True user.type = User.Types.WORKMAN if commit: user.save() Workman.objects.create(user=user, contact=self.cleaned_data.get('contact')) return user
2. 可选调整views.py配置
因为现在表单已经绑定了自定义User模型,原来的CreateView中指定的model=Consumer/model=Workman可以删除,或者保留也不影响运行。
额外校验:确认你的settings.py中已经正确配置
AUTH_USER_MODEL = 'accounts.User'
内容的提问来源于stack exchange,提问作者Rupesh Chaulagain
相关产品推荐
相关产品推荐

