Issue
Greeting, I am trying to add to User form a new CharField named company but even when the field is filled the data are not saved... I tried the following with no success as I got the error in the title.
views.py
def register(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user_frm = form.save(commit = False)
user_frm.company = request.user.company
user_frm.save()
username = form.cleaned_data.get('username')
messages.success(request, f"Registration Complete! User: {username}")
username = form.cleaned_data.get('username')
login(request, user_frm)
return redirect("main:homepage")
else:
for msg in form.error_messages:
messages.error(request, f"{msg}:{form.error_messages[msg]}")
return render(request = request,
template_name = "main/register.html",
context={"form":form})
form = NewUserForm
return render(request,
"main/register.html",
context={"form":form})
forms.py
class NewUserForm(UserCreationForm):
email = forms.EmailField(required=True)
company = forms.CharField( max_length= 500)
class Meta:
model = User
fields = ("username", "email", "company", "password1", "password2")
def save(self, commit=True):
user = super(NewUserForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
user.company = self.cleaned_data["company"]
if commit:
user.save()
return user
Solution
SOLVED using the following:
def update_user_data(user):
Profile_Reg.objects.update_or_create(user=user, defaults={'company': user.company,})
def register(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save()
user.refresh_from_db()
user.company = form.cleaned_data.get('company')
update_user_data(user)
user.save()
raw_password = form.cleaned_data.get('password1')
username = form.cleaned_data.get('username')
messages.success(request, f"Registration Complete! User: {username}")
#breakpoint()
#user = authenticate(username=user.username, password=raw_password)
#breakpoint()
login(request, user)
return redirect("main:homepage")
else:
for msg in form.error_messages:
messages.error(request, f"{msg}:{form.error_messages[msg]}")
return render(request = request,
template_name = "main/register.html",
context={"form":form})
form = NewUserForm
return render(request,
"main/register.html",
context={"form":form})
where Profile_Reg is a model:
class Profile_Reg(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
company = models.CharField(max_length=5000)
def __str__(self):
return str(self.user)
Answered By - TheGame
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.