Данные диагностики Django не отображаются в админке после выполнения конечной точки
Я работаю над проектом Django, в котором я обрабатываю данные о пациенте и сохраняю их в модели DiagnosisResult
в базе данных (SQLite). Цель состоит в том, чтобы эти данные отображались в интерфейсе администратора Django, но после вызова конечной точки данные не появляются ни в базе данных, ни в администраторе.
Под «макетом» я подразумеваю вымышленные данные (не макеты тестового фреймворка), которые я предварительно сгенерировал, чтобы избежать использования реальных данных пациента.
Вот мой минимальный воспроизводимый пример (по порядку: models.py, views.py, urls.py, образец JSON-данных, Dockerfile, docker-compose.yml):
models.py
from django.db import models
class Subtype(models.Model):
CATEGORY_CHOICES = [('Acute', 'Acute'), ('Chronic', 'Chronic')]
category = models.CharField(max_length=20, choices=CATEGORY_CHOICES)
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class DiagnosisResult(models.Model):
patient_name = models.CharField(max_length=100)
age = models.IntegerField()
symptoms = models.TextField() # Comma-separated list of symptoms
test_results = models.TextField()
likely_diagnoses = models.ManyToManyField(Subtype)
def __str__(self):
return f"{self.patient_name} (Age: {self.age})"
views.py
import json
from pathlib import Path
from django.http import JsonResponse
from .models import Subtype, DiagnosisResult
# File paths
IS_DOCKER = Path("/app").exists() # Check if running inside Docker
MOCK_DATA_FILE = (
Path("/app/apps/diagnosis/mock_data/mock_diagnosis_inputs.json")
if IS_DOCKER
else Path(__file__).resolve().parent / "mock_data" / "mock_diagnosis_inputs.json"
)
def process_and_save_mock_diagnoses(request):
with open(MOCK_DATA_FILE, "r") as file:
mock_data = json.load(file)
results = []
for patient in mock_data:
likely_subtypes = Subtype.objects.filter(category="Acute")
diagnosis_result = DiagnosisResult.objects.create(
patient_name=patient["patient_name"],
age=patient["age"],
symptoms=", ".join(patient["symptoms"]),
test_results=patient["test_results"]
)
diagnosis_result.likely_diagnoses.set(likely_subtypes)
results.append({
"patient_name": diagnosis_result.patient_name,
"likely_diagnoses": [subtype.name for subtype in likely_subtypes],
})
return JsonResponse(results, safe=False)
urls.py
from django.urls import path
from .views import process_and_save_mock_diagnoses
urlpatterns = [
path('process-mock-diagnoses/', process_and_save_mock_diagnoses, name='process-mock-diagnoses'),
]
Образец JSON-данных (mock_diagnosis_inputs.json)
[
{
"patient_name": "John Doe",
"age": 45,
"symptoms": ["Fatigue", "Fever"],
"test_results": "High WBC count"
},
{
"patient_name": "Jane Smith",
"age": 60,
"symptoms": ["Bruising", "Swollen spleen"],
"test_results": "Low RBC count"
}
]
Dockerfile
# Use an official Python image
FROM python:3.12-slim
# Install required system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
python3-venv gcc libpq-dev && \
apt-get clean && rm -rf /var/lib/apt/lists/*
# Set the working directory in the container
WORKDIR /app
# Copy the backend directory
COPY backend /app
# Install dependencies
RUN python3 -m venv /app/venv && \
/app/venv/bin/pip install --no-cache-dir -r requirements.txt
# Expose the port for the Django development server
EXPOSE 8000
# Set the default path to include the virtual environment's binaries
ENV PATH="/app/venv/bin:$PATH"
# Command to run the Django server
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
docker-compose.yml
version: '3.8'
services:
django:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
volumes:
- ./backend:/app
environment:
- PYTHONUNBUFFERED=1