Объект '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)
Вернуться на верх