2015-12-21 7 views
1

Недавно я выяснил, как создать регистрацию в Django. Проблема в том, что есть только три поля: username, password и это подтверждение.Неправильно настроенная форма - Django

В моем проекте должно быть не менее двух типов users с различными атрибутами. Customers и Freelancers. Так что я попытался сделать новую модель, как я нашел здесь, на StackOverflow, но она возвращает исключение:

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

Создание ModelForm без атрибута «fields» или «exclude» запрещено; форма 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 –

Смежные вопросы