7

Using the polymorphic inlines for Django admin instead of the regular one

This commit is contained in:
Jasper Berghoef
2016-11-22 11:11:37 +01:00
parent 2c7e970bee
commit 9ecc1c47c9
2 changed files with 32 additions and 29 deletions

View File

@ -1,15 +1,17 @@
from django.contrib import admin
from personalisation import models
from polymorphic.admin import PolymorphicInlineSupportMixin, StackedPolymorphicInline
class RulesInline(StackedPolymorphicInline):
class TimeRuleAdminInline(admin.TabularInline):
class TimeRuleAdminInline(StackedPolymorphicInline.Child):
"""Inline the Time Rule into the administration interface for segments"""
model = models.TimeRule
extra = 0
class ReferralRuleAdminInline(admin.TabularInline):
class ReferralRuleAdminInline(StackedPolymorphicInline.Child):
"""
Inline the Referral Rule into the administration interface for segments
"""
@ -17,7 +19,7 @@ class ReferralRuleAdminInline(admin.TabularInline):
extra = 0
class VisitCountRuleAdminInline(admin.TabularInline):
class VisitCountRuleAdminInline(StackedPolymorphicInline.Child):
"""
Inline the Visit Count Rule into the administration interface for segments
"""
@ -25,12 +27,14 @@ class VisitCountRuleAdminInline(admin.TabularInline):
extra = 0
class SegmentAdmin(admin.ModelAdmin):
"""Add the inlines to the Segment admin interface"""
inlines = (
TimeRuleAdminInline, ReferralRuleAdminInline,
VisitCountRuleAdminInline
model = models.AbstractBaseRule
child_inlines = (
TimeRuleAdminInline,
ReferralRuleAdminInline,
VisitCountRuleAdminInline,
)
admin.site.register(models.Segment, SegmentAdmin)
@admin.register(models.Segment)
class SegmentAdmin(PolymorphicInlineSupportMixin, admin.ModelAdmin):
inlines = (RulesInline,)

View File

@ -14,10 +14,9 @@ from modelcluster.fields import ParentalKey
from modelcluster.models import ClusterableModel
from polymorphic.models import PolymorphicModel
from wagtail.utils.decorators import cached_classmethod
from wagtail.wagtailadmin.edit_handlers import (FieldPanel, FieldRowPanel,
InlinePanel, MultiFieldPanel,
ObjectList, PageChooserPanel,
TabbedInterface)
from wagtail.wagtailadmin.edit_handlers import (
FieldPanel, FieldRowPanel, InlinePanel, MultiFieldPanel, ObjectList,
PageChooserPanel, TabbedInterface)
from wagtail.wagtailadmin.forms import WagtailAdminPageForm
from wagtail.wagtailcore.models import Page
@ -26,7 +25,7 @@ from wagtail.wagtailcore.models import Page
class AbstractBaseRule(PolymorphicModel):
"""Base for creating rules to segment users with"""
segment = ParentalKey(
'Segment',
'personalisation.Segment',
# TODO: Make the related names accesible to wagtail admin
# for inlining them.
related_name="%(app_label)s_%(class)s_related",