python - AttributeError ,“超级”对象没有属性“保存”,在基于类的视图中
问题描述
我是 Django 新手,无法使用基于类的视图保存注册表单。我在模型中创建了抽象用户,如下所示。
模型.py
class User(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
full_name = models.CharField(max_length=255, blank=True, null=True)
active = models.BooleanField(default=True) # can login
staff = models.BooleanField(default=False) # staff user non superuser
admin = models.BooleanField(default=False) # superuser
timestamp = models.DateTimeField(auto_now_add=True)
user_type = models.CharField(max_length= 120, choices=u_type)
# confirm = models.BooleanField(default=False)
# confirmed_date = models.DateTimeField(default=False)
USERNAME_FIELD = 'email' #username
# USERNAME_FIELD and password are required by default
REQUIRED_FIELDS = [] #['full_name'] #python manage.py createsuperuser
objects = UserManager()
def __str__(self):
return self.email
def get_full_name(self):
if self.full_name:
return self.full_name
return self.email
def get_short_name(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.staff
@property
def is_admin(self):
return self.admin
@property
def is_active(self):
return self.active
我已经使用 Form 来创建注册表单,如下所示 forms.py
class RegistrationForm(forms.Form):
password1 = forms.CharField(label='password')
password2 = forms.CharField(label='Confirm Password')
user_email = forms.CharField(label='Email')
full_name = forms.CharField(label='Full Name')
class Meta:
model = User
fields = ('full_name', 'email','user_type')
def clean_password2(self):
password1 = self.cleaned_data.get('password1')
password2 = self.cleaned_data.get('password2')
if password1 and password2 and password1 != password2:
raise forms.ValidationError('password does not match')
return password2
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user_mail = self.cleaned_data.get('user_email')
print(user_mail)
user.set_password(self.cleaned_data['password1'])
if(commit):
user.save()
return user
这是表单的视图文件
视图.py
class RegisterView(FormView):
form_class = RegistrationForm
template_name = 'register.html'
success_url='/login'
def form_valid(self,form):
request = self.request
# f = JobForm(request.POST)
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
print(form)
instance = form.save(commit=False)
return redirect('/')
我面临的问题是当我尝试保存注册表单时,它给了我错误“超级”对象没有属性“保存”。目前我正在努力使用基于类的视图来保存表单。
解决方案
推荐阅读
- android - 如何在旋转时保持图像视图的状态?
- python-3.x - 在 Dash 回调的输入中使用了不存在的对象
- python - 如何展平多级熊猫 DF?
- spring-boot - Springboot gzip压缩-响应大小不减小
- f# - 使用 FParsec 跳过空格和注释
- android - 禁用 InjectMappingFiledId 任务
- c++ - C++ 实用程序::conversions 在静态链接库中不起作用
- git - Jenkins 管道:如何在不启动 shell 的情况下检查远程分支
- c++ - 修复取决于预处理器条件的“-Wunused-parameter”警告
- r - 计算具有相同值的几列的百分比