Preciso gravar na models User do django um campo denominado "Role" do tipo boolean. Este campo vai ser True quando for um cliente se cadastrando e False para quando for um Fornecedor. A principio, no que tange visualmente, o campo aparece na tela e eu consigo marcar ele, mas seu valor não persiste no banco. Na verdade, ele nem precisaria aparecer, mas na via views.py eu gostaria de quando "origin" fosse igual a 'Client' o valor seria True e False quando 'Provider'.
models.py
class Role(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# Adicionando os campos
role = models.BooleanField(default=False)
def __str__(self):
return self.user.username
views.py
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import authenticate, login
from django.conf import settings
from .forms import RegisterForm
def register(request, origin):
template_name = '../templates/register.html'
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
user = form.save()
user = authenticate( username=user.username,password=form.cleaned_data['password1']
)
login(request,user)
return redirect('qnow_client:quotation_client')
#return HttpResponse("<h1>Área do marceneiro</h1>")
else:
form = RegisterForm()
context = {
'origin': origin,
'active_page_client_provider':'active',
'form': form
}
return render(request, template_name,context)
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class RegisterForm(UserCreationForm):
email = forms.EmailField(label='E-mail')
role = forms.BooleanField(label='Cliente')
def clean_email(self):
email = self.cleaned_data['email']
if User.objects.filter(email=email).exists():
raise forms.ValidationError('Já existe usuário com este E-mail!')
return email
def save(self):
user = super(RegisterForm, self).save(commit=False)
user.email = self.cleaned_data['email']
user.save()
return user