说明书

admin.py 2.9KB

    # -*- coding: utf-8 -*- import os import shortuuid from django.contrib import admin from django.core.files.storage import default_storage from pyPdf import PdfFileReader, PdfFileWriter from intro.models import IntroCatalogInfo, IntroCategoryInfo, IntroContentInfo, IntroFavoriteInfo, IntroNameInfo class IntroCategoryInfoAdmin(admin.ModelAdmin): list_display = ('category', 'position', 'status', 'created_at', 'updated_at') list_filter = ('status', ) search_fields = ('category', ) class IntroNameInfoAdmin(admin.ModelAdmin): list_display = ('name', 'category', 'position', 'status', 'created_at', 'updated_at') list_filter = ('category', 'status') search_fields = ('name', 'category__category') class IntroCatalogInfoAdmin(admin.ModelAdmin): list_display = ('catalog', 'name', 'pdf', 'content', 'position', 'status', 'created_at', 'updated_at') list_filter = ('name', 'status') search_fields = ('catalog', 'name__name') def save_model(self, request, obj, form, change): obj.save() if 'pdf' in form.changed_data or 'content' in form.changed_data: if not obj.pdf: return IntroContentInfo.objects.filter(catalog=obj).delete() inpdf = PdfFileReader(obj.pdf) for idx in xrange(inpdf.getNumPages()): # PDF 文件写对象 outpdf = PdfFileWriter() # PDF 新增一页 outpdf.addPage(inpdf.getPage(idx)) # PDF 文件路径 pdfpath = 'pdf/{}.pdf'.format(shortuuid.uuid()) # PDF 文件生成 outstream = default_storage.open(pdfpath, 'wb') outpdf.write(outstream) content = '' while True: if not obj.content: break tmpLine = obj.content.readline() if tmpLine == '' or tmpLine == os.linesep: break content += tmpLine IntroContentInfo.objects.create( title=obj.catalog, pdf=pdfpath, content=content, catalog=obj, position=idx, ) class IntroContentInfoAdmin(admin.ModelAdmin): list_display = ('title', 'pdf', 'content', 'catalog', 'position', 'status', 'created_at', 'updated_at') list_filter = ('catalog', 'status') search_fields = ('title', 'content', 'catalog__catalog') class IntroFavoriteInfoAdmin(admin.ModelAdmin): list_display = ('user_id', 'content', 'status', 'created_at', 'updated_at') list_filter = ('status', ) admin.site.register(IntroCategoryInfo, IntroCategoryInfoAdmin) admin.site.register(IntroNameInfo, IntroNameInfoAdmin) admin.site.register(IntroCatalogInfo, IntroCatalogInfoAdmin) admin.site.register(IntroContentInfo, IntroContentInfoAdmin) admin.site.register(IntroFavoriteInfo, IntroFavoriteInfoAdmin)