MrOzOn пре 5 година
родитељ
комит
f442360f99

+ 0 - 0
apps/indicator/__init__.py


+ 13 - 0
apps/indicator/admin.py

@@ -0,0 +1,13 @@
+from django.contrib import admin
+
+from apps.indicator.models import Indicator
+
+
+class IndicatorAdmin(admin.ModelAdmin):
+    fields = ('type', 'value1', 'value2', 'value_added', 'patient', 'last_modified', 'comments', 'observing')
+    list_display = ('id', 'type', 'value1', 'value2', 'value_added', 'patient', 'last_modified', 'comments', 'observing')
+    search_fields = ('type',)
+    ordering = ('-created_date',)
+
+
+admin.site.register(Indicator, IndicatorAdmin)

+ 5 - 0
apps/indicator/apps.py

@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class UserConfig(AppConfig):
+    name = 'user'

+ 37 - 0
apps/indicator/migrations/0001_initial.py

@@ -0,0 +1,37 @@
+# Generated by Django 3.0.8 on 2020-07-23 13:58
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('patient', '0001_initial'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('indicatortype', '0002_auto_20200723_1641'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Indicator',
+            fields=[
+                ('id', models.AutoField(primary_key=True, serialize=False)),
+                ('value1', models.DecimalField(decimal_places=3, max_digits=8)),
+                ('value2', models.DecimalField(blank=True, decimal_places=3, max_digits=8, null=True)),
+                ('value_added', models.DateTimeField()),
+                ('last_modified', models.DateTimeField(auto_now=True)),
+                ('comments', models.CharField(blank=True, max_length=150, null=True)),
+                ('observing', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+                ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='patient.Patient')),
+                ('type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='indicatortype.IndicatorType')),
+            ],
+            options={
+                'verbose_name': 'Измерение',
+                'verbose_name_plural': 'Измерения',
+            },
+        ),
+    ]

+ 20 - 0
apps/indicator/migrations/0002_indicator_created_date.py

@@ -0,0 +1,20 @@
+# Generated by Django 3.0.8 on 2020-07-23 14:04
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('indicator', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='indicator',
+            name='created_date',
+            field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
+            preserve_default=False,
+        ),
+    ]

+ 0 - 0
apps/indicator/migrations/__init__.py


+ 23 - 0
apps/indicator/models.py

@@ -0,0 +1,23 @@
+from django.contrib.auth.models import User
+from django.db import models
+
+
+class Indicator(models.Model):
+    """ Модель (сущность) - Измерение """
+    id = models.AutoField(primary_key=True)
+    type = models.ForeignKey('indicatortype.IndicatorType', on_delete=models.CASCADE)
+    value1 = models.DecimalField(max_digits=8, decimal_places=3)
+    value2 = models.DecimalField(max_digits=8, decimal_places=3, blank=True, null=True)
+    value_added = models.DateTimeField()
+    patient = models.ForeignKey('patient.Patient', on_delete=models.CASCADE)
+    last_modified = models.DateTimeField(auto_now=True)
+    comments = models.CharField(max_length=150, blank=True, null=True)
+    observing = models.ForeignKey(User, on_delete=models.CASCADE)
+    created_date = models.DateTimeField(auto_now_add=True)
+
+    def __str__(self):
+        return "Измерение № %s - %s" % (self.id, self.value1,)
+
+    class Meta:
+        verbose_name = "Измерение"
+        verbose_name_plural = "Измерения"

+ 22 - 0
apps/indicator/serializers.py

@@ -0,0 +1,22 @@
+from rest_framework import serializers, status
+from rest_framework.exceptions import ValidationError
+
+from apps.indicator.models import Indicator
+from apps.indicatortype.models import IndicatorType
+from apps.patient.models import Patient
+
+
+class IndicatorSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Indicator
+        fields = '__all__'
+        extra_kwargs = {
+            'observing': {'required': False}
+        }
+
+    def create(self, validated_data):
+        user = self.context['request'].user
+        validated_data['observing'] = user
+        indicator = Indicator(**validated_data)
+        indicator.save()
+        return indicator

+ 3 - 0
apps/indicator/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 25 - 0
apps/indicator/views.py

@@ -0,0 +1,25 @@
+from django.shortcuts import render
+from rest_framework import viewsets
+
+from apps.indicator.models import Indicator
+from apps.indicator.serializers import IndicatorSerializer
+
+
+class IndicatorViewSet(viewsets.ModelViewSet):
+
+    def get_queryset(self):
+        user = self.request.user
+        return Indicator.objects.filter(patient__owners=user)
+    # queryset = Patient.objects.all().order_by('-created_date')
+
+    # def get_object(self):
+    #     queryset = self.get_queryset()
+    #     filter = {}
+    #     for field in self.multiple_lookup_fields:
+    #         filter[field] = self.kwargs[field]
+    #
+    #     obj = get_object_or_404(queryset, **filter)
+    #     self.check_object_permissions(self.request, obj)
+    #     return obj
+
+    serializer_class = IndicatorSerializer

+ 11 - 1
apps/patient/admin.py

@@ -1,3 +1,13 @@
 from django.contrib import admin
 
-# Register your models here.
+from apps.patient.models import Patient
+
+
+class PatientTypeAdmin(admin.ModelAdmin):
+    fields = ('name', 'avatar', 'created_date', 'owners')
+    list_display = ('id', 'name', 'avatar', 'created_date')
+    search_fields = ('name',)
+    ordering = ('-created_date',)
+
+
+admin.site.register(Patient, PatientTypeAdmin)

+ 1 - 0
healthdiarybackend/settings.py

@@ -45,6 +45,7 @@ INSTALLED_APPS = [
     'rest_framework.authtoken',
     'apps.patient',
     'apps.indicatortype',
+    'apps.indicator'
 ]
 
 MIDDLEWARE = [

+ 3 - 0
healthdiarybackend/urls.py

@@ -18,10 +18,12 @@ from django.contrib import admin
 from django.urls import path, include
 from rest_framework import routers
 
+from apps.indicator.models import Indicator
 from apps.patient.models import Patient
 from apps.user import views as user_views
 from apps.patient import views as patient_views
 from apps.indicatortype import views as indicatortype_views
+from apps.indicator import views as indicator_views
 
 from apps.user.serializers import CustomAuthToken
 
@@ -29,6 +31,7 @@ router = routers.DefaultRouter()
 router.register(r'users', user_views.UserViewSet)
 router.register(r'patients', patient_views.PatientViewSet, Patient)
 router.register(r'indicatortype', indicatortype_views.IndicatorTypeViewSet)
+router.register(r'indicator', indicator_views.IndicatorViewSet, Indicator)
 
 urlpatterns = [
     path('', include(router.urls)),