admin.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. from django import forms
  2. from django.contrib import admin
  3. from django.contrib.auth import get_user_model
  4. from django.utils.translation import ugettext_lazy as _
  5. from import_export import resources
  6. from import_export.admin import ImportExportModelAdmin
  7. # Register your models here.
  8. from .models import *
  9. class ArticleListFilter(admin.SimpleListFilter):
  10. title = _("作者")
  11. parameter_name = 'author'
  12. def lookups(self, request, model_admin):
  13. authors = list(set(map(lambda x: x.author, Article.objects.all())))
  14. for author in authors:
  15. yield (author.id, _(author.username))
  16. def queryset(self, request, queryset):
  17. id = self.value()
  18. if id:
  19. return queryset.filter(author__id__exact=id)
  20. else:
  21. return queryset
  22. class ArticleForm(forms.ModelForm):
  23. # body = forms.CharField(widget=AdminPagedownWidget())
  24. class Meta:
  25. model = Article
  26. fields = '__all__'
  27. def makr_article_publish(modeladmin, request, queryset):
  28. queryset.update(status='p')
  29. def draft_article(modeladmin, request, queryset):
  30. queryset.update(status='d')
  31. def close_article_commentstatus(modeladmin, request, queryset):
  32. queryset.update(comment_status='c')
  33. def open_article_commentstatus(modeladmin, request, queryset):
  34. queryset.update(comment_status='o')
  35. makr_article_publish.short_description = '发布选中文章'
  36. draft_article.short_description = '选中文章设置为草稿'
  37. close_article_commentstatus.short_description = '关闭文章评论'
  38. open_article_commentstatus.short_description = '打开文章评论'
  39. class FilesInline(admin.TabularInline):
  40. model = Files
  41. min_num = 0
  42. max_num = 10
  43. class LinksInline(admin.TabularInline):
  44. model = Links
  45. min_num = 0
  46. max_num = 10
  47. class ArticleResource(resources.ModelResource):
  48. class Meta:
  49. model = Article
  50. fields = ('title', 'pub_date', 'author',)
  51. class ArticlelAdmin(ImportExportModelAdmin):
  52. resource_class = ArticleResource
  53. search_fields = ('title', 'body',)
  54. form = ArticleForm
  55. list_display = ('id', 'title', 'author', 'created_time', 'views', 'status', 'type', 'article_order')
  56. list_display_links = ('id', 'title')
  57. list_filter = (ArticleListFilter, 'status', 'type', 'category', 'tags')
  58. filter_horizontal = ('tags',)
  59. exclude = ('slug', 'created_time', 'last_mod_time')
  60. view_on_site = True
  61. actions = [makr_article_publish, draft_article, close_article_commentstatus, open_article_commentstatus]
  62. inlines = [FilesInline, LinksInline]
  63. def get_form(self, request, obj=None, **kwargs):
  64. form = super(ArticlelAdmin, self).get_form(request, obj, **kwargs)
  65. form.base_fields['author'].queryset = get_user_model().objects.filter(is_superuser=True)
  66. return form
  67. def save_model(self, request, obj, form, change):
  68. super(ArticlelAdmin, self).save_model(request, obj, form, change)
  69. from website.utils import cache
  70. cache.clear()
  71. def get_view_on_site_url(self, obj=None):
  72. if obj:
  73. url = obj.get_full_url()
  74. return url
  75. else:
  76. from django.contrib.sites.models import Site
  77. site = Site.objects.get_current().domain
  78. return site
  79. class TagAdmin(admin.ModelAdmin):
  80. exclude = ('slug', 'last_mod_time', 'created_time')
  81. search_fields = ('name',)
  82. class CategoryAdmin(admin.ModelAdmin):
  83. exclude = ('slug', 'last_mod_time', 'created_time')
  84. search_fields = ('name',)
  85. class LinksAdmin(admin.ModelAdmin):
  86. exclude = ('last_mod_time', 'created_time')
  87. class SideBarAdmin(admin.ModelAdmin):
  88. list_display = ('name', 'content', 'is_enable', 'sequence')
  89. exclude = ('last_mod_time', 'created_time')
  90. class BlogSettingsAdmin(admin.ModelAdmin):
  91. pass