Django IntegrityError in Admin Panel for Custom User Model

79 Views Asked by At

I'm facing an issue with Django's admin panel while trying to manage a custom user model. I have created a Customuser model for user registration and management, separate from the built-in User model. However, when I try to access the admin panel to view, edit, or delete user entries, I encounter an IntegrityError related to the django_admin_log table

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models

class CustomUserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError('The Email field 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_superuser(self, email, password=None, using=None, **extra_fields):
        user=self.create_user(
            email=self.normalize_email(email),
            password=password
        )
        user.is_admin=True
        user.is_active=True
        user.is_staff=True
        user.is_superuser=True
        user.save(using=self._db)
        return user

class CustomUser(AbstractBaseUser, PermissionsMixin):
    user_id = models.AutoField(primary_key=True)
    user_name = models.CharField(max_length=100)
    first_name=models.CharField(max_length=100)
    last_name=models.CharField(max_length=100)
    email = models.EmailField(unique=True)
    password = models.CharField(max_length=100)
    company_name = models.CharField(max_length=200, blank=True, null=True)
    contactno = models.IntegerField(blank=True, null=True)
    address = models.TextField(blank=True, null=True)
    city = models.CharField(max_length=100, blank=True, null=True)
    state = models.CharField(max_length=100, blank=True, null=True)
    zip = models.CharField(max_length=20, blank=True, null=True)
    country = models.CharField(max_length=100, blank=True, null=True)
    profile_picture = models.CharField(max_length=200, blank=True, null=True)
    date_of_birth = models.DateField(blank=True, null=True)
    gender = models.CharField(max_length=10, blank=True, null=True)
    is_active = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    last_login = models.DateTimeField(blank=True, null=True)
    date_joined = models.DateTimeField(auto_now_add=True)
    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['user_name']
    class Meta:
        app_label = 'shop'

admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth import get_user_model
from .models import CustomUser,Category

CustomUser=get_user_model()
# Register your models here.
class CustomUserAdmin(UserAdmin):
    model = CustomUser
    list_display = ('email', 'user_name', 'last_login', 'date_joined', 'is_active')
    filter_horizontal = ()
    list_filter = ()
    fieldsets = ()

    # Update the ordering attribute to use 'user_name'
    ordering = ('email',)

admin.site.register(CustomUser, CustomUserAdmin)
admin.site.register(Category)

Issue: When I log in as an admin user and try to access the Customers model in the admin panel, I get the following IntegrityError: IntegrityError at /admin/myapp/customers/ insert or update on table "django_admin_log" violates foreign key constraint "django_admin_log_user_id_c564eba6_fk_auth_user_id" DETAIL: Key (user_id)=(34) is not present in table "auth_user".

Why am I encountering this IntegrityError related to the django_admin_log table? How can I resolve this issue and successfully manage entries for my Customers model in the admin panel? I appreciate any insights or guidance on resolving this issue. Thank you in advance!

0

There are 0 best solutions below