【问题标题】:defined a Form class, but django raised exception saying it is not defined定义了一个 Form 类,但是 django 引发了异常,说它没有定义
【发布时间】:2020-02-25 01:16:10
【问题描述】:
        aqszzFollowed instructions as on [the page][1]. to customize user profile while using django-allauth. Django/python saying it can't find the "SignupForm" class definition, which is clearly defined in the file forms.py in the users app as in the code below. Anyone has any idea what's going on?

forms.py

from django import forms
from allauth.account.forms import AddEmailForm, BaseSignupForm
from django.core.exceptions import ValidationError
from django.conf import settings
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser

class SignupForm(BaseSignupForm):
    first_name = forms.CharField(max_length=30, label='Firstname')
    last_name = forms.CharField(max_length=150, label='Lastname')

    def signup(self, request, user):
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()

class MyAddEmailForm(AddEmailForm):
    def clean_email(self):
        email = super().clean_email()
        if self.user.emailaddress_set.count() >= settings.USERS_EMAILS_MAX_COUNT:
            raise ValidationError('Number of related emails can be no more than %d.' % settings.USERS_EMAILS_MAX_COUNT)
        return email

class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = CustomUser
        fields = (...)

class CustomUserChangeForm(UserChangeForm):
    class Meta:
        model = CustomUser
        fields = (...)

错误信息是:

  File "D:\Python\Django\m4ever\users\admin.py", line 4, in <module>
    from .forms import CustomUserCreationForm, CustomUserChangeForm
  File "D:\Python\Django\m4ever\users\forms.py", line 3, in <module>
    from allauth.account.forms import AddEmailForm, BaseSignupForm
  File "C:\Users\Freedom\Anaconda3\envs\myvenv\lib\site-packages\allauth\account\forms.py", line 261, in <module>
    class BaseSignupForm(_base_signup_form_class()):
  File "C:\Users\Freedom\Anaconda3\envs\myvenv\lib\site-packages\allauth\account\forms.py", line 249, in _base_signup_form_class
    fc_classname))
django.core.exceptions.ImproperlyConfigured: Module "users.forms" does not define a "SignupForm" class

【问题讨论】:

    标签: django class exception definition django-allauth


    【解决方案1】:

    一直怀疑与循环导入问题有关。将代码更改为如下所示,问题就消失了。这两个变化是:

    1. SignupForm 现在继承自普通 forms.Form 而不是 allauth.account.forms.BaseSignupForm

    2. 将“allauth.account.forms import AddEmailForm”从文件的开头移到需要它之前。

    仍然希望 Python 和/或 Django-Allauth 方面的专家澄清到底发生了什么。

    from django import forms
    from django.core.exceptions import ValidationError
    from django.conf import settings
    from django.contrib.auth.forms import UserCreationForm, UserChangeForm
    from .models import CustomUser
    
    class SignupForm(forms.Form):
        first_name = forms.CharField(max_length=30, label='Firstname')
        last_name = forms.CharField(max_length=150, label='Lastname')
    
        def signup(self, request, user):
            user.first_name = self.cleaned_data['first_name']
            user.last_name = self.cleaned_data['last_name']
            user.save()
    
    from allauth.account.forms import AddEmailForm
    class MyAddEmailForm(AddEmailForm):
        def clean_email(self):
            email = super().clean_email()
            if self.user.emailaddress_set.count() >= settings.USERS_EMAILS_MAX_COUNT:
                raise ValidationError('Number of related emails can be no more than %d.' % settings.USERS_EMAILS_MAX_COUNT)
            return email
    
    class CustomUserCreationForm(UserCreationForm):
        class Meta:
            model = CustomUser
            fields = (...)
    
    class CustomUserChangeForm(UserChangeForm):
        class Meta:
            model = CustomUser
            fields = (...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多