class ScanSerializer(serializers.HyperlinkedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name="mri:scan-detail") dicom = serializers.HyperlinkedRelatedField( view_name="dicom:series-detail", queryset=Series.objects.all() ) subject = serializers.HyperlinkedRelatedField( view_name="research:subject-detail", queryset=get_subject_model().objects.all(), required=False, ) nifti = serializers.HyperlinkedRelatedField( view_name="mri:nifti-detail", queryset=NIfTI.objects.all(), required=False, allow_null=True, ) study_groups = serializers.HyperlinkedRelatedField( view_name="research:group-detail", queryset=get_group_model().objects.all(), many=True, required=False, ) sequence_type = serializers.HyperlinkedRelatedField( view_name="mri:sequencetype-detail", queryset=SequenceType.objects.all(), required=False, allow_null=True, ) class Meta: model = Scan fields = ( "id", "url", "dicom", "subject", "nifti", "study_groups", "sequence_type", "institution_name", "time", "description", "number", "echo_time", "repetition_time", "inversion_time", "spatial_resolution", "comments", ) def create(self, validated_data): scan, created = Scan.objects.get_or_create(**validated_data) if created and scan.dicom and len(validated_data) == 1: scan.update_fields_from_dicom() scan.save() return scan
def scan_subject_to_session(apps, schema_editor): Subject = get_subject_model() Scan = apps.get_model("django_mri", "Scan") Session = apps.get_model("django_mri", "Session") for scan in Scan.objects.all(): subject = Subject.objects.filter( id_number=scan.dicom.patient.uid ).first() first_image = scan.dicom.image_set.first().dcm.path header = DicomHeader(first_image) date = header.get("StudyDate") or header.get("SeriesDate") try: time = header.get("StudyTime") except ValueError: time = datetime.time() else: if not time: time = datetime.time() session_time = datetime.datetime.combine(date, time) if not subject: session = Session.objects.create(time=session_time) scan.session_id = session.id else: session = subject.mri_session_set.filter( time=session_time ).first() if not session: session = Session.objects.create( subject_id=subject.id, time=session_time ) else: existing_scan_number = Scan.objects.filter( session_id=session.id, number=scan.number ) if existing_scan_number: session = Session.objects.create( subject_id=subject.id, time=session_time ) scan.session_id = session.id scan.save()
from django_mri.utils.utils import ( get_group_model, get_measurement_model, get_study_model, get_subject_model, ) from rest_framework import serializers Group = get_group_model() Measurement = get_measurement_model() Subject = get_subject_model() Study = get_study_model() class MiniStudySerializer(serializers.ModelSerializer): """ Minified serializer class for the :class:`Study` model. """ class Meta: model = Study fields = "id", "title", "description" class MiniGroupSerializer(serializers.ModelSerializer): """ Minified serializer class for the :class:`Group` model. """ study = MiniStudySerializer()
def test_get_subject_model(self): result = utils.get_subject_model() self.assertEqual(result, Subject)