Skip to content
Advertisement

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

  • Project Name : fusion
  • App Name : admin_lte
  • Python 3.7
  • Django 2
  • MySql

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 :

Advertisement

Answer

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)
Advertisement