2

(SORRY FOR BAD ENG) When i make custom form (forms.py)

class UserRegisterForm(UserCreationForm):
email = forms.EmailField(required=True, label='Email')
first_name = forms.CharField(required=True, label='First name', max_length=100)
last_name = forms.CharField(required=True, label='Last name', max_length=100)

class Meta(UserCreationForm.Meta):
    model = User
    fields = ["username", "first_name", "last_name", "email", "password1", "password2"]

    def save(self, commit=True):
        user = super(UserCreateForm, self).save(commit=False)
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

    def clean_email(self):
        if User.objects.filter(email=self.cleaned_data['email']).exists():
            raise ValidationError(self.fields['email'].error_messages['exists'])
        return self.cleaned_data['email']

Here is my views

def register(request):
if request.method == 'POST':
    form = UserRegisterForm(request.POST)
    if form.is_valid():
        form.save()
        username = form.cleaned_data['username']
        password = form.cleaned_data['password1']
        user = authenticate(username=username, password=password)
        user.save()
        login(user)
        return redirect('/index/')
else: form = UserRegisterForm()

def login(request):
context = dict()
return render(request, "dashboard/login.html", context)

def register(request):
if request.method == 'POST':
    form = UserRegisterForm(request.POST)
    if form.is_valid():
        form.save()
        username = form.cleaned_data['username']
        password = form.cleaned_data['password1']
        user = authenticate(username=username, password=password)
        user.save()
        login(user)
        return redirect('/index/')
else: form = UserRegisterForm()

context = {'form':form}
return render(request, 'dashboard/register.html', context)

def dashboard(request):

    return render(request, "dashboard/dashboard.html")

Django returnig me "AttributeError at /register/ 'User' object has no attribute 'META'" idk why? I'd like to keep the sequence How to fix this?

Write where I was wrong

2 Answers 2

1

remove arg in the meta class and change UserCreationForm to forms.Form

  class UserRegisterForm(forms.Form):
email = forms.EmailField(required=True, label='Email')
first_name = forms.CharField(required=True, label='First name', max_length=100)
last_name = forms.CharField(required=True, label='Last name', max_length=100)

class Meta: # just like this
    model = User
    fields = ["username", "first_name", "last_name", "email", "password1", "password2"]

    def save(self, commit=True):
        user = super(forms.Form, self).save(commit=False)
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

    def clean_email(self):
        if User.objects.filter(email=self.cleaned_data['email']).exists():
            raise ValidationError(self.fields['email'].error_messages['exists'])
        return self.cleaned_data['email']

############################################################################

remove def save from your form.py and just make it simple in view.py like this example

            if obj.is_valid():
                x = Users.objects.get(u_id=request.session['user_id'])
                form.cleaned_data['userid'] = x
                form = obj.save(commit=False)
            form.save()
Sign up to request clarification or add additional context in comments.

1 Comment

@СашаСеменищев try to change UserCreationForm to forms.Form
0

So, you need to remove 'Meta' class and make ordering settings

forms.py

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True, label='First name', max_length=100)
    last_name = forms.CharField(required=True, label='Last name', max_length=100)
    field_order = ["username", "first_name", "last_name", "email", "password1", 
    "password2"]

and you need to save in the form your fields

views.py

def register(request):
if request.method == 'POST':
    form = UserRegisterForm(request.POST)
    if form.is_valid():
        instance = form.save() #form
        username = form.cleaned_data['username']
        password = form.cleaned_data['password1']
        email = request.POST.get('email') # getting email
        first_name = request.POST.get('first_name') # getting first name
        last_name = request.POST.get('last_name') # getting last name
        user = authenticate(username=username, password=password) #making user
        instance.email = email #saving email
        instance.first_name = first_name #saving email
        instance.last_name = last_name #saving email
        instance.save() #save form
        form.save_m2m() # save all
        return redirect('/login/')
        messages.success(request, f'You have been registred')
else: form = UserRegisterForm()

context = {'form':form}
return render(request, 'dashboard/register.html', context)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.