admin.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from __future__ import unicode_literals
  2. from copy import deepcopy
  3. from django.contrib import admin
  4. from django.utils.translation import ugettext_lazy as _
  5. from mezzanine.blog.models import BlogPost, BlogCategory
  6. from mezzanine.conf import settings
  7. from mezzanine.core.admin import (DisplayableAdmin, OwnableAdmin,
  8. BaseTranslationModelAdmin)
  9. from mezzanine.twitter.admin import TweetableAdminMixin
  10. blogpost_fieldsets = deepcopy(DisplayableAdmin.fieldsets)
  11. blogpost_fieldsets[0][1]["fields"].insert(1, "categories")
  12. blogpost_fieldsets[0][1]["fields"].extend(["content", "allow_comments"])
  13. blogpost_list_display = ["title", "user", "status", "admin_link"]
  14. if settings.BLOG_USE_FEATURED_IMAGE:
  15. blogpost_fieldsets[0][1]["fields"].insert(-2, "featured_image")
  16. blogpost_list_display.insert(0, "admin_thumb")
  17. blogpost_fieldsets = list(blogpost_fieldsets)
  18. blogpost_fieldsets.insert(1, (_("Other posts"), {
  19. "classes": ("collapse-closed",),
  20. "fields": ("related_posts",)}))
  21. blogpost_list_filter = deepcopy(DisplayableAdmin.list_filter) + ("categories",)
  22. class BlogPostAdmin(TweetableAdminMixin, DisplayableAdmin, OwnableAdmin):
  23. """
  24. Admin class for blog posts.
  25. """
  26. fieldsets = blogpost_fieldsets
  27. list_display = blogpost_list_display
  28. list_filter = blogpost_list_filter
  29. filter_horizontal = ("categories", "related_posts",)
  30. def save_form(self, request, form, change):
  31. """
  32. Super class ordering is important here - user must get saved first.
  33. """
  34. OwnableAdmin.save_form(self, request, form, change)
  35. return DisplayableAdmin.save_form(self, request, form, change)
  36. class BlogCategoryAdmin(BaseTranslationModelAdmin):
  37. """
  38. Admin class for blog categories. Hides itself from the admin menu
  39. unless explicitly specified.
  40. """
  41. fieldsets = ((None, {"fields": ("title",)}),)
  42. def has_module_permission(self, request):
  43. """
  44. Hide from the admin menu unless explicitly set in ``ADMIN_MENU_ORDER``.
  45. """
  46. for (name, items) in settings.ADMIN_MENU_ORDER:
  47. if "blog.BlogCategory" in items:
  48. return True
  49. return False
  50. admin.site.register(BlogPost, BlogPostAdmin)
  51. admin.site.register(BlogCategory, BlogCategoryAdmin)