|
# -*- 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:
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:
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)
|