|
| 1 | +from cms.admin_mixins import RelatedReadonlyFieldsMixin |
1 | 2 | from cms.models import Page, Section, Sitemap |
2 | 3 | from django import forms |
3 | 4 | from django.contrib import admin |
@@ -149,10 +150,70 @@ class Meta: |
149 | 150 | widgets = {"body": CodeEditorWidget()} |
150 | 151 |
|
151 | 152 |
|
| 153 | +@admin.register(Sitemap) |
| 154 | +class SitemapAdmin(RelatedReadonlyFieldsMixin, admin.ModelAdmin): |
| 155 | + fields = ["id", "parent_sitemap", "page", "name", "order", "display_start_at", "display_end_at"] |
| 156 | + readonly_fields = ["id"] |
| 157 | + related_readonly_config = { |
| 158 | + "page": ["id", "is_active", "css", "title", "subtitle"], |
| 159 | + "parent_sitemap": ["id", "name", "order", "display_start_at", "display_end_at"], |
| 160 | + } |
| 161 | + |
| 162 | + def get_fieldsets(self, request, obj=...): |
| 163 | + original_fieldsets = super().get_fieldsets(request, obj) |
| 164 | + if obj and obj.parent_sitemap: |
| 165 | + original_fieldsets.append( |
| 166 | + ( |
| 167 | + "Parent Sitemap 정보", |
| 168 | + { |
| 169 | + "fields": [f"get_parent_sitemap_{f}" for f in self.related_readonly_config["parent_sitemap"]], |
| 170 | + "classes": ("collapse",), |
| 171 | + }, |
| 172 | + ) |
| 173 | + ) |
| 174 | + if obj and obj.page: |
| 175 | + original_fieldsets.append( |
| 176 | + ( |
| 177 | + "Page 정보", |
| 178 | + { |
| 179 | + "fields": [f"get_page_{f}" for f in self.related_readonly_config["page"]], |
| 180 | + "classes": ("collapse",), |
| 181 | + }, |
| 182 | + ) |
| 183 | + ) |
| 184 | + return original_fieldsets |
| 185 | + |
| 186 | + def get_queryset(self, request): |
| 187 | + return super().get_queryset(request).select_related("page").select_related("parent_sitemap") |
| 188 | + |
| 189 | + |
| 190 | +class PageAdmin(admin.ModelAdmin): |
| 191 | + pass |
| 192 | + |
| 193 | + |
152 | 194 | @admin.register(Section) |
153 | | -class SectionAdmin(admin.ModelAdmin): |
| 195 | +class SectionAdmin(RelatedReadonlyFieldsMixin, admin.ModelAdmin): |
154 | 196 | form = SectionAdminForm |
| 197 | + fields = ["id", "page", "order", "css", "body"] |
| 198 | + readonly_fields = ["id"] |
| 199 | + related_readonly_config = {"page": ["id", "is_active", "css", "title", "subtitle"]} |
| 200 | + |
| 201 | + def get_fieldsets(self, request, obj=...): |
| 202 | + original_fieldsets = super().get_fieldsets(request, obj) |
| 203 | + if obj and obj.page: |
| 204 | + original_fieldsets.append( |
| 205 | + ( |
| 206 | + "Page 정보", |
| 207 | + { |
| 208 | + "fields": [f"get_page_{f}" for f in self.related_readonly_config["page"]], |
| 209 | + "classes": ("collapse",), |
| 210 | + }, |
| 211 | + ) |
| 212 | + ) |
| 213 | + return original_fieldsets |
| 214 | + |
| 215 | + def get_queryset(self, request): |
| 216 | + return super().get_queryset(request).select_related("page") |
155 | 217 |
|
156 | 218 |
|
157 | 219 | admin.site.register(Page) |
158 | | -admin.site.register(Sitemap) |
|
0 commit comments