配置不当的表单 - Django

Improperly Configured Form - Django

最近,我弄清楚了如何在 Django 中创建注册。问题是只有三个字段 - usernamepassword 和它的确认。

在我的项目中,至少会有两种不同属性的usersCustomersFreelancers。所以我尝试制作我在 Whosebug 上找到的新模型,但它 returns 异常:

Exception Type: ImproperlyConfigured
Exception Value:    
Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form UserCreateForm needs updating.

MODELS.PY:

class UserCustomerProfile(models.Model):
    user = models.OneToOneField(User)
    email = models.EmailField()
    age = models.IntegerField()

    def __str__(self):
          return "%s's profile" % self.user

FORMS.PY:

class UserCreateForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User

    def save(self, commit=True):
        if not commit:
            raise NotImplementedError("Can't create User and UserProfile without database save")
        user = super(UserCreateForm, self).save(commit=True)
        user_profile = UserCustomerProfile(user=user, email=self.cleaned_data['email'])
        user_profile.save()
        return user, user_profile

VIEWS.PY:

def register(request):
     if request.method == 'POST':
         form = UserCustomerProfile(request.POST)
         if form.is_valid():
             form.save()
             return HttpResponseRedirect('register/complete/')

     else:
         form = UserCreateForm()
     token = {}
     token.update(csrf(request))
     token['form'] = form

     return render_to_response('register/registration_form.html', token)

你知道如何解决这个问题吗?

Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form UserCreateForm needs updating.

尝试例如:

class UserCreateForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ['email', ]

您需要将 “字段”属性 添加到 “Meta”内部 class in ” UserCreateForm(UserCreationForm)" class如下图:

FORMS.PY:

class UserCreateForm(UserCreationForm):
    email = forms.EmailField(required=True)
    
    class Meta:
        model = User
        fields = ("username", "email") 
        # ↑ ↑ ↑ Here ↑ ↑ ↑   
    def save(self, commit=True):
        if not commit:
            raise NotImplementedError("Can't create User and UserProfile without database save")
        user = super(UserCreateForm, self).save(commit=True)
        user_profile = UserCustomerProfile(user=user, email=self.cleaned_data['email'])
        user_profile.save()
        return user, user_profile

或者,您需要添加 "exclude" 属性"Meta" inner class in "UserCreateForm(UserCreationForm)" class如下图:

FORMS.PY:

class UserCreateForm(UserCreationForm):
    email = forms.EmailField(required=True)
    
    class Meta:
        model = User
        exclude = ("first_name", "last_name")
        # ↑ ↑ ↑ Here ↑ ↑ ↑
    def save(self, commit=True):
        if not commit:
            raise NotImplementedError("Can't create User and UserProfile without database save")
        user = super(UserCreateForm, self).save(commit=True)
        user_profile = UserCustomerProfile(user=user, email=self.cleaned_data['email'])
        user_profile.save()
        return user, user_profile