Когда я выполняю команду runserver, сервер запускается и входит в канал администратора, возникает OperationalError
В models.py:
и в admin.py:
from django.contrib import admin
from core.models import *
# Register your models here.
class ProductImagesAdmin(admin.TabularInline):
model= ProductImages
class ProductAdmin(admin.ModelAdmin):
inlines=[ProductImagesAdmin]
list_display=['user','title','product_image','price','featured','product_status']
class CategoryAdmin(admin.ModelAdmin):
list_display=['title','catagory_image']
class VendorAdmin(admin.ModelAdmin):
list_display=['title','Vendor_image']
class CartOrderAdmin(admin.ModelAdmin):
list_display=['user','price','paid_status','order_date','product_status']
class CartOrderItemsAdmin(admin.ModelAdmin):
list_display=['order','invoice_num','product_status','item','image','qty','price','total']
class ProductReviewAdmin(admin.ModelAdmin):
list_display=['user','product','review','rating','date']
class wishlistAdmin(admin.ModelAdmin):
list_display=['user','product','date']
class AddressAdmin(admin.ModelAdmin):
list_display=['user','address','status']
admin.site.register(Product,ProductAdmin)
admin.site.register(Category,CategoryAdmin)
admin.site.register(Vendor,VendorAdmin)
admin.site.register(CartOrder,CartOrderAdmin)
admin.site.register(CartOrderItems,CartOrderItemsAdmin)
admin.site.register(ProductReview,ProductReviewAdmin)
admin.site.register(wishlist,wishlistAdmin)
admin.site.register(Address,AddressAdmin)
в app(name is userauths)-> models.py
from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.db import models
from django.utils.translation import gettext_lazy as _
# Create your models here.
class CustomUserManager(BaseUserManager):
"""Define a model manager for User model with no username field."""
def _create_user(self, email, password=None, **extra_fields):
"""Create and save a User with the given email and password."""
if not email:
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
return self._create_user(email, password, **extra_fields)
def create_superuser(self, email, password=None, **extra_fields):
"""Create and save a SuperUser with the given email and password."""
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self._create_user(email, password, **extra_fields)
class CustomUser(AbstractUser):
username = None
email = models.EmailField(_('email address'), unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
В app(userauths) в model.py есть
Class CustomUser
Но все равно я получаю ошибку:
OperationalError at /admin/login/
no such table: userauths_customuser
пожалуйста, помогите мне разобраться с этим. Я создал несколько моделей, затем зарегистрировал их и затем применил все миграции команды и это работает, но когда я выполняю команду "python manage.py runserver", а затем перейти на канал администратора там есть ошибка
Я создал похожее приложение django, с точно такими же файлами, как вы упомянули, и структурой, которую я вывел из вашего листинга settings.py выше, и, к моему счастью, я смог воспроизвести проблему.
И тут меня осенило... Вы не определили никаких миграций в приложении userauths
. Без миграций в приложении makemigrations
не будет генерировать код, связанный с этим приложением, и migrate
не создаст таблицу. Но когда вы запустите код, приложение попытается получить доступ к данным из таблицы, потому что вы определили пользовательский AUTH_USER_MODEL
в settings.py.
Таким образом, решение может быть одним из двух:
Решение 1:
заставьте Django создать таблицу, используйте флаг --run-syncdb с командой migrate, как описано здесь
python manage.py migrate --run-syncdb
Решение 2:
Добавьте файл миграции в приложение userauths
. Предпочтительное решение - использовать миграцию для создания суперпользователя по умолчанию. Это пригодится и при развертывании.
Создано Django 4.2 в 2023-12-01 02:30
импорт django.contrib.auth.models import django.contrib.auth.validators import django.utils.timezone из django.db import migrations from django.db import models
Вот пример такой миграции:
Решение 3:
Создайте таблицу вручную, взаимодействуя с БД напрямую. В вашем случае вы используете sqlite3. Вы можете использовать sqlite3 клиент для создания таблицы в sqlite3 db файле.