jazzband / django-polymorphic

Improved Django model inheritance with automatic downcasting

Home Page:https://django-polymorphic.readthedocs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

child models show in index regardless of show_in_index settings

LeOndaz opened this issue · comments

from django.contrib import admin
from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin, PolymorphicChildModelFilter
from .models import Device, DeviceSubscribedEmail, Hub, Plug, PlugMini


class DeviceChildAdmin(PolymorphicChildModelAdmin):
    show_in_index = False

    def has_add_permission(self, request):
        return False

    def has_delete_permission(self, request, obj=None):
        return False


@admin.register(Plug)
class PlugAdmin(DeviceChildAdmin):
    base_model = Plug


class EmailSubscribersInline(admin.StackedInline):
    model = DeviceSubscribedEmail
    extra = 1


@admin.register(PlugMini)
class PlugMiniAdmin(DeviceChildAdmin):
    base_model = PlugMini
    fieldsets = [
        ("info", {"fields": ["id", "name", "country", "hub_device", "is_powered_on"]}),
        (
            "usage",
            {"fields": ["electricity_of_day", "voltage", "weight", "electric_current"]},
        ),
        ("thresholds", {"fields": ["weight_threshold"]}),
    ]
    inlines = [EmailSubscribersInline]


@admin.register(Hub)
class HubAdmin(DeviceChildAdmin):
    pass


@admin.register(Device)
class DeviceAdmin(PolymorphicParentModelAdmin):
    base_model = Device
    child_models = [PlugMini, Plug, Hub]
    list_filter = [PolymorphicChildModelFilter]

    def has_add_permission(self, request):
        return False

All models inherit from Device model which is a PolymorphicModel and still, all models show up in the admin page.

Looks like duplicate of #497
See also workaround #497 (comment)