AttributeError: объект 'User' не имеет атрибута 'user' при попытке проверить электронную почту пользователя

У меня есть веб-приложение django с аутентификацией и проверкой электронной почты. У меня есть два варианта аутентификации. Один из них аутентифицирует Клиента или Сотрудника. У меня есть User(AbstractUser) для подключения обоих вариантов.

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    is_customer = models.BooleanField(default=False)
    is_employee = models.BooleanField(default=False)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

    signup_confirmation = models.BooleanField(default=False)

class Customer(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key = True)
    phone_number = models.CharField(max_length=20)
    location = models.CharField(max_length=20)

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key = True)
    phone_number = models.CharField(max_length=20)
    designation = models.CharField(max_length=20)

просмотров



...employee_register...

class customer_register(CreateView):
    model = User
    form_class = CustomerSignUpForm
    template_name = '../templates/customer_register.html'

    def form_valid(self, form):

        user = form.save()
        # current_site = get_current_site(request)
        current_site = '127.0.0.1:8000'
        subject = 'Please Activate Your Account'
        message = render_to_string('activation_request.html', {
            'user': user,
            'domain': current_site,
            'uid': urlsafe_base64_encode(force_bytes(user.pk)),
            'token': account_activation_token.make_token(user),
        })
        send_mail(
            subject,
            message,
            'from@example.com',
            ['to@example.com'],
            fail_silently=False,
        )
        # login(self.request, user)
        return redirect('/')


def activate(request, uidb64, token):
    try:
        uid = force_str(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=uid)
    except (TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None

    if user is not None and account_activation_token.check_token(user, token):
        user.is_active = True
        user.user.signup_confirmation = True
        user.save()
        login(request, user)
        return redirect('index')
    else:
        return render(request, 'activation_invalid.html')

В моем представлении сначала есть класс, который срабатывает при нажатии кнопки submit в моей форме. Затем отправляется письмо со ссылкой на url, который запускает функцию активации.

activation_request.html

{% autoescape off %}
Hi {{ user.username }},

Please click the following link to confirm your registration:

http://{{ domain }}{% url 'activate' uidb64=uid token=token %}
{% endautoescape %}

...
path('customer_register/',views.customer_register.as_view(), name='customer_register'),
path('activate/<slug:uidb64>/<slug:token>/', views.activate, name='activate'),

В моей функции activate я хочу установить BooleanField в моей модели клиента в true с помощью user.user.signup_confirmation = True, но это не работает.

Я получаю ошибку:

AttributeError: объект 'User' не имеет атрибута 'user'

Спасибо за помощь:)

У объектаuser нет атрибута с именем user, потому что вы не назначили этот атрибут.

Решение :

пишите в представлении активации :

user.signup_confirmation = True

вместо :

user.user.signup_confirmation = True
Вернуться на верх