django_dicom package

Module contents

Manages DICOM files by creating Django models to represent the various DICOM entities (see django_dicom.models package for more information). Also provides the django_dicom.data_import package for supervising the maintenance of these models when importing new data, and a few more utility modules meant to help retrieving DICOM data easily and efficiently.

Submodules

django_dicom.admin module

class django_dicom.admin.ImageAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

list_display = ('id', 'uid', 'series', 'number', 'date', 'time')
media
ordering = ['-date', '-series', 'number']
readonly_fields = ['uid']
class django_dicom.admin.ImageInLine(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

exclude = ('uid', 'date', 'time')
media
model

alias of django_dicom.models.image.Image

ordering = ['number']
class django_dicom.admin.PatientAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

fieldsets = ((None, {'fields': ('uid',)}), ('Name', {'fields': ('name_prefix', 'given_name', 'middle_name', 'family_name', 'name_suffix')}), ('Personal Information', {'fields': ('sex', 'date_of_birth')}))
inlines = (<class 'django_dicom.admin.SeriesInLine'>,)
list_display = ('id', 'uid', 'given_name', 'family_name', 'sex', 'date_of_birth')
media
class django_dicom.admin.SeriesAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

inlines = (<class 'django_dicom.admin.ImageInLine'>,)
list_display = ('id', 'uid', 'date', 'time', 'number', 'description')
media
ordering = ['-date', '-time']
readonly_fields = ['uid']
class django_dicom.admin.SeriesInLine(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

fields = ('date', 'number', 'description', 'scanning_sequence', 'sequence_variant', 'repetition_time', 'echo_time', 'inversion_time')
media
model

alias of django_dicom.models.series.Series

ordering = ['date', 'number']
class django_dicom.admin.StudyAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

inlines = (<class 'django_dicom.admin.StudySeriesInLine'>,)
list_display = ('id', 'uid', 'description')
media
readonly_fields = ['uid']
class django_dicom.admin.StudySeriesInLine(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

fields = ('patient', 'date', 'number', 'description', 'scanning_sequence', 'sequence_variant')
media
model

alias of django_dicom.models.series.Series

ordering = ['patient', 'date', 'number']

django_dicom.apps module

class django_dicom.apps.DjangoDicomConfig(app_name, app_module)

Bases: django.apps.config.AppConfig

data_extension = 'dcm'
name = 'django_dicom'

django_dicom.urls module

django_dicom.urls.path(route, view, kwargs=None, name=None, *, Pattern=<class 'django.urls.resolvers.RoutePattern'>)

django_dicom.utils module

class django_dicom.utils.NumpyEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

Bases: json.encoder.JSONEncoder

Converts NumPy array to a JSON serializable nested list. Based on this SO answer.

default(obj)

Implement this method in a subclass such that it returns a serializable object for o, or calls the base implementation (to raise a TypeError).

For example, to support arbitrary iterators, you could implement default like this:

def default(self, o):
    try:
        iterable = iter(o)
    except TypeError:
        pass
    else:
        return list(iterable)
    # Let the base class default method raise the TypeError
    return JSONEncoder.default(self, o)
django_dicom.utils.snake_case_to_camel_case(string: str) → str

django_dicom.views module

class django_dicom.views.DefaultsMixin

Bases: object

Default settings for view authentication, permissions, filtering and pagination.

authentication_classes = (<class 'rest_framework.authentication.BasicAuthentication'>, <class 'rest_framework.authentication.TokenAuthentication'>)
filter_backends = (<class 'django_filters.rest_framework.backends.DjangoFilterBackend'>, <class 'rest_framework.filters.SearchFilter'>, <class 'rest_framework.filters.OrderingFilter'>)
permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>,)
class django_dicom.views.ImageViewSet(**kwargs)

Bases: django_dicom.views.DefaultsMixin, rest_framework.viewsets.ModelViewSet

API endpoint that allows images to be viewed or edited.

basename = None
description = None
detail = None
filter_class

alias of django_dicom.filters.image_filter.ImageFilter

name = None
ordering_fields = ('series', 'number', 'date', 'time')
pagination_class

alias of StandardResultsSetPagination

parser_classes = (<class 'rest_framework.parsers.MultiPartParser'>,)
pixel_data(request, pk: int = None)

Returns the instance’s pixel array as a Response.

Parameters
  • request (Request) – The request object.

  • pk (int, optional) – The requested object’s primary key, by default None

Returns

Image pixel data as a response.

Return type

Response

put(request, format=None)
queryset = <QuerySet [<Image: 1.3.12.2.1107.5.2.43.66024.2017033009481518365933824>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481525411433827>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481532477033830>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481539557833833>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481546586433836>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481553773133839>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481560749733842>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481567797833845>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481574853133848>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481581925833851>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481589080733854>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481822014733857>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481828949433860>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481835987533863>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481843066133866>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481850119333869>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481857193633872>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481864363133875>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481871327833878>, <Image: 1.3.12.2.1107.5.2.43.66024.2017033009481878488633881>, '...(remaining elements truncated)...']>
search_fields = ('number', 'date', 'time', 'uid')
serializer_class

alias of django_dicom.serializers.image_serializer.ImageSerializer

suffix = None
class django_dicom.views.PatientViewSet(**kwargs)

Bases: django_dicom.views.DefaultsMixin, rest_framework.viewsets.ModelViewSet

API endpoint that allows patients to be viewed or edited.

basename = None
description = None
detail = None
filter_class

alias of django_dicom.filters.patient_filter.PatientFilter

name = None
pagination_class

alias of StandardResultsSetPagination

queryset = <QuerySet [<Patient: 0KBX3AOI>]>
serializer_class

alias of django_dicom.serializers.patient_serializer.PatientSerializer

suffix = None
class django_dicom.views.SeriesViewSet(**kwargs)

Bases: django_dicom.views.DefaultsMixin, rest_framework.viewsets.ModelViewSet

API endpoint that allows series to be viewed or edited.

basename = None
description = None
detail = None
filter_class

alias of django_dicom.filters.series_filter.SeriesFilter

name = None
ordering_fields = ('study', 'patient', 'number', 'date', 'time', 'scanning_sequence', 'sequence_variant', 'pixel_spacing', 'echo_time', 'inversion_time', 'repetition_time', 'manufacturer', 'manufacturer_model_name', 'magnetic_field_strength', 'device_serial_number', 'institution_name')
pagination_class

alias of StandardResultsSetPagination

pixel_data(request, pk: int = None)

Returns the instance’s pixel array as a Response.

Parameters
  • request (Request) – The request object.

  • pk (int, optional) – The requested object’s primary key, by default None

Returns

Series pixel data as a response.

Return type

Response

queryset = <QuerySet [<Series: 1.3.12.2.1107.5.2.43.66024.20170330094814855633819.0.0.0>]>
search_fields = ('study', 'patient', 'body_part_examined', 'number', 'description', 'date', 'time', 'modality', 'protocol_name', 'scanning_sequence', 'sequence_variant', 'pixel_spacing', 'echo_time', 'inversion_time', 'repetition_time', 'flip_angle', 'manufacturer', 'manufacturer_model_name', 'magnetic_field_strength', 'device_serial_number', 'institution_name', 'uid')
serializer_class

alias of django_dicom.serializers.series_serializer.SeriesSerializer

suffix = None
class django_dicom.views.StandardResultsSetPagination

Bases: rest_framework.pagination.PageNumberPagination

page_size = 25
page_size_query_param = 'page_size'
class django_dicom.views.StudyViewSet(**kwargs)

Bases: django_dicom.views.DefaultsMixin, rest_framework.viewsets.ModelViewSet

API endpoint that allows studies to be viewed or edited.

basename = None
description = None
detail = None
filter_class

alias of django_dicom.filters.study_filter.StudyFilter

name = None
pagination_class

alias of StandardResultsSetPagination

queryset = <QuerySet [<Study: 1.3.12.2.1107.5.2.43.66024.30000017033006135450400000001>]>
serializer_class

alias of django_dicom.serializers.study_serializer.StudySerializer

suffix = None