pythondjangodjango-modelsdjango-admindjango-inheritance

How to register inherited sub class in admin.py file in django?


Question is "I want to register sub model in django admin-panel",when i write code for model registration in admin.py file that time occurred below error.

django.core.exceptions.ImproperlyConfigured: The model Device is abstract, so it cannot be registered with admin.

NOTE : I used multiple separated model file.

device.py (Model File)

from django.db import models

class Device(models.Model):
    device_type = models.CharField(max_length=100,blank=False)
    price = models.IntegerField()
    status =  models.CharField(max_length=10, default="SOLD")
    issues = models.CharField(max_length=100, default="No Issues")

    class Meta:
        abstract = True

    def __str__(self):
        return 'Device_type:{0} Price:{1}'.format(self.device_type,self.price)


#Inheritance Concept
class Laptop(Device):
    pass
   
    class Meta:
        db_table = "laptop"

class Desktop(Device):
    pass
    
    class Meta:
        db_table = "Desktop"

class Mobile(Device):
    pass

    class Meta:
        db_table = "Mobile"

init.py File

from django_adminlte.models.employee import Employee
from django_adminlte.models.device import Device

admin.py

from django.contrib import admin
from.models import Employee
from.models import Device

admin.site.register (Employee)
admin.site.register (Device)

I want to show sub model (Desktop,Laptop,Mobile) in admin panel so admin can add some data from admin panel.


Project Structure Image:

Project Structure Image :


Solution

  • I can see in your code Device is a abstract model. So, we should not register it because abstract models do not have associated tables in databases.

    from django.contrib import admin
    from .models import Employee, Laptop, Mobile, Desktop
    
    admin.site.register(Employee)
    admin.site.register(Laptop)
    admin.site.register(Mobile)
    admin.site.register(Desktop)