首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置不当的表单- Django

配置不当的表单- Django
EN

Stack Overflow用户
提问于 2015-12-21 11:01:22
回答 2查看 1.8K关注 0票数 1

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

在我的项目中,至少有两种不同属性的users类型。CustomersFreelancers.因此,我尝试创建新的模型,就像我在StackOverflow上发现的那样,但是它返回异常:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)

你知道怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-21 11:05:41

禁止在没有“字段”属性或“排除”属性的情况下创建ModelForm;表单UserCreateForm需要更新。

例如:

代码语言:javascript
复制
class UserCreateForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ['email', ]
票数 4
EN

Stack Overflow用户

发布于 2022-05-26 15:51:43

您需要在"UserCreateForm(UserCreationForm)“类中将”字段“属性添加到"Meta”内部类中,如下所示:

FORMS.PY:

代码语言:javascript
复制
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

或者,您需要在"UserCreateForm(UserCreationForm)“类中添加”排除“属性"Meta”内部类,如下所示:

FORMS.PY:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34394116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档