Когда я выполняю команду 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 файле.

Вернуться на верх