Генерация PDF отчета в Django Rest Framework

У меня уже есть представление, которое отвечает с данными, я хочу генерировать PDF из тех же данных, будет ли возможно отобразить шаблон с serializer.data любое другое решение для генерации PDF на бэкенде приветствуется...

Сериализатор .

class UsersAuditTrailSerializer(serializers.ModelSerializer): """ Журнал аудита пользователей """ изменения = serializers.SerializerMethodField() операция = serializers.SerializerMethodField() owner = serializers.StringRelatedField(source='history_user.displayname',read_only=True) id = serializers.IntegerField(source='history_id') user_id = serializers.IntegerField(source='id')

def get_operation(self,obj):
    operation_type = {'+': 'Created', '~': 'Updated', '-': 'Deleted'}
    return operation_type[obj.history_type]

def get_changes(self, obj):
    change_log = ""
    current = obj
    previous = obj.prev_record
    if previous:
        delta = current.diff_against(previous)
        for cng in delta.changes:
            if cng.field == 'password':
                change_log+="User Password Changed"
                continue
            if cng.field == 'name':
                continue
            change_log+="Field : '{}' Changed from {} to {} ,".format(cng.field, cng.old, cng.new)
    elif current.history_type == "+":
        change_log ="User created"
    else:
        pass
        
    return change_log
class Meta:
    model = User.history.model
    fields = ['id', 'user_id', 'displayname', 'owner','history_date', 'operation','changes']

Views.py:

class UsersAuditTrailPDFView(generics.ListAPIView): """ Журнал аудита пользователей и их отчет о журнале изменений"""" serializer_class = serializers.UsersAuditTrailSerializer permission_classes = (permissions.IsAuthenticated,) filter_backends = (filters.DjangoFilterBackend,OrderingFilter) filter_class = UsersAuditTrailFilterSet queryset = User.history.all()

def get(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())
    template_path = '../login/rpt/templates/user_report.html'
    serializer = self.get_serializer(queryset, many=True)
    context = serializer.data
    # # find the template and render it.
    template = get_template(template_path)
    html = template.render(context)
    response = Response(content_type='application/pdf')

    # # create a pdf
    pisa_status = pisa.CreatePDF(
    html, dest=response)
    # # if error then show some funny view
    if pisa_status.err:
        return HttpResponse('We had some errors <pre>' + html + '</pre>')
    response['Content-Disposition'] = 'attachment; filename="report.pdf"'
    response = Response("TEST")
    return response
Вернуться на верх