Объект 'User' не является подписываемым : Django
Данные хранятся в базе данных вместе со следующей ошибкой.
ОШИБКА
TypeError at /auth/email-register
'User' object is not subscriptable
Request Method: POST
Request URL: http://127.0.0.1:8000/auth/email-register
Django Version: 3.2.6
Exception Type: TypeError
Exception Value:
'User' object is not subscriptable
Exception Location: C:\xampp\htdocs\Projects\Barter\Authentication\views.py, line 72, in post
Python Executable: C:\Users\Qasim Iftikhar\anaconda3\python.exe
Python Version: 3.8.5
Python Path:
['C:\\xampp\\htdocs\\Projects\\Barter',
'C:\\Users\\Qasim Iftikhar\\anaconda3\\python38.zip',
'C:\\Users\\Qasim Iftikhar\\anaconda3\\DLLs',
'C:\\Users\\Qasim Iftikhar\\anaconda3\\lib',
'C:\\Users\\Qasim Iftikhar\\anaconda3',
'C:\\Users\\Qasim Iftikhar\\anaconda3\\lib\\site-packages',
'C:\\Users\\Qasim Iftikhar\\anaconda3\\lib\\site-packages\\win32',
'C:\\Users\\Qasim Iftikhar\\anaconda3\\lib\\site-packages\\win32\\lib',
'C:\\Users\\Qasim Iftikhar\\anaconda3\\lib\\site-packages\\Pythonwin']
Server time: Sun, 05 Sep 2021 17:46:29 +0000
CDOE
models.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
import datetime
import os
# Create your models here.
def filepath(request, filename):
old_filename = filename
timeNow = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
filename = "%s%s", (timeNow, old_filename)
return os.path.join('product_images/'+str(filename))
# Create your models here.
class CustomUserManager(BaseUserManager):
def _create_user(self, email, **extra_fields):
if not email:
raise ValueError("Email must be provided")
user =self.model(
email = self.normalize_email(email),
**extra_fields
)
user.save(using=self._db)
return user
def create_user(self, email, **extra_fields):
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_active', False)
extra_fields.setdefault('is_superuser', False)
return self._create_user(email, **extra_fields)
def create_superuser(self, email, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_active', True)
extra_fields.setdefault('is_superuser', True)
return self._create_user(email, **extra_fields)
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(db_index=True, unique=True, max_length=1024)
first_name = models.CharField(max_length=1024, null=True)
last_name = models.CharField(max_length=1024, null=True)
user_mobile = models.CharField(max_length=1024, null=True)
user_image = models.ImageField(upload_to=filepath, null=True)
user_bio = models.CharField(max_length=4096, null=True)
user_dob = models.DateField(null=True)
user_invitation_id = models.CharField(max_length=1024, default=None, null=True)
is_staff = models.BooleanField(default=True)
is_active = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=True)
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
class Meta:
verbose_name = 'User'
verbose_name_plural = 'Users'
views.py
ОБЪЯСНЕНИЕ КОДА
- В models.py, переопределение части кода Django для использования электронной почты вместо имени пользователя для аутентификации Django.
- В файле views, создаем класс для хранения email и отправки проверочного письма, а затем перенаправления на страницу регистрации.
- Данные сохраняются успешно и после этого возникает ошибка.