'How to hide fields that belong to the model I'm inheriting from in django admin panel

I have these 2 models in my models.py

class Student(AbstractBaseUser):
    date_of_birth = models.DateField(null=True)
    phone_number = PhoneNumberField(null=True)

class Teacher(Student):
    bio = models.TextField(null=True)
    image = CompressedImageField(null=True, blank=True, default="default.png")
    student = models.ForeignKey(Student, on_delete=models.SET_NULL, null=True)

Now in admin panel when i go to edit the Teacher instance I display only bio image and student. The issue is that also display those fields when I try to edit Teacher instance but entering from Student model. So is there a way for that?

P.S the models and fields may not make sense because they are examples.



Solution 1:[1]

Use ModelAdmin.fields or ModelAdmin.exclude to control which fields you want to include or exclude in the admin site form.

from django.contrib import admin

class TeacherAdmin(admin.ModelAdmin):
    exclude = ("date_of_birth", "phone_number")

And register it like so

admin.site.register(Teacher, TeacherAdmin)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1