2015-12-21 40 views
1

最近,我已经弄清楚如何在Django中创建注册。问题是,只有三个字段 - usernamepassword,这是确认。不正确配置的表单 - Django

在我的项目中,至少有两种类型的users具有不同的属性。 CustomersFreelancers。所以我试图让我在这里找到在计算器上新的模式,但它返回例外:

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) 

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

+0

部分题外话,但你真的需要在所有限制你的用户模式?它完全有可能有人可能希望既招揽自由职业者,我可以告诉他们他们需要两个模型在分钟 – Sayse

+0

@Sayse也许不是,但我是新的Django,我尽我所能。关键是创建注册表单最简单的方法就是使用内置函数。然后我意识到有两种类型的用户 - 自由职业者 - 译者和客户。对于翻译者,我想知道,哪种语言翻译,但我不想要关于客户的这些信息。如果有更好的方法,那会很好。 –

回答

2

禁止创建不带'fields'属性或'exclude'属性的ModelForm;窗体UserCreateForm需要更新。

尝试例如为:

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

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

谢谢,这有效,但有一个问题。它用电子邮件形式重写用户名表格。有没有可以让他们以注册形式出现的选项? –

+0

林不知道,如果我正确理解你。但是,如果你想在表单中使用用户名和电子邮件,你想把'fields = ['username','email',]'。请参阅文档以了解更多信息:https://docs.djangoproject.com/en/1.9/topics/forms/modelforms/#django.forms.ModelForm –