Объект 'AnonymousUser' не имеет атрибута 'компания'
Приветствую, Я пытаюсь добавить в форму User новое CharField с именем company, но даже когда поле заполнено, данные не сохраняются... Я попытался сделать следующее, но безуспешно, так как получил ошибку в заголовке.
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
Попробуйте это:
# views.py
def register(request):
form_class = NewUserForm
if request.method == "POST":
form = form_class(request.POST)
if form.is_valid():
user = form.save()
messages.success(request, f"Registration Complete! User: {user.username}")
login(request, user)
return redirect("main:homepage")
else:
form = form_class()
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 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})
где Profile_Reg - модель:
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)