From 5a765941b0637adb2ef021cc95e75faae72fa042 Mon Sep 17 00:00:00 2001 From: rithviknishad Date: Thu, 4 Jun 2026 17:13:52 +0530 Subject: [PATCH 1/3] ENG-513 Add all other missing fields to datapoints for template support --- .../data_points/allergy_intolerance.py | 61 ++++++++++++++---- .../context_builder/data_points/diagnosis.py | 34 +++++++--- .../data_points/diagnostic_report.py | 29 ++++++++- .../context_builder/data_points/medication.py | 47 +++++++++++++- .../data_points/service_request.py | 62 +++++++++++++++---- .../context_builder/data_points/symptom.py | 34 +++++++--- 6 files changed, 218 insertions(+), 49 deletions(-) diff --git a/care/emr/reports/context_builder/data_points/allergy_intolerance.py b/care/emr/reports/context_builder/data_points/allergy_intolerance.py index ff0c0e497d..ecb7a4ce1c 100644 --- a/care/emr/reports/context_builder/data_points/allergy_intolerance.py +++ b/care/emr/reports/context_builder/data_points/allergy_intolerance.py @@ -13,6 +13,13 @@ "resolved": "Resolved", } +CATEGORY_DISPLAY = { + "food": "Food", + "medication": "Medication", + "environment": "Environment", + "biologic": "Biologic", +} + VERIFICATION_STATUS_DISPLAY = { "unconfirmed": "Unconfirmed", "confirmed": "Confirmed", @@ -26,6 +33,11 @@ "unable_to_assess": "Unable to Assess", } +ALLERGY_INTOLERANCE_TYPE_DISPLAY = { + "allergy": "Allergy", + "intolerance": "Intolerance", +} + class AllergyIntoleranceReportFilter(filters.FilterSet): clinical_status = MultiSelectFilter(field_name="clinical_status") @@ -45,29 +57,41 @@ class AllergyIntoleranceContextBuilder(QuerysetContextBuilder): clinical_status = Field( display="Clinical Status", preview_value="Active", - mapping=lambda a: CLINICAL_STATUS_DISPLAY.get( - a.clinical_status, a.clinical_status.title() - ) - if a.clinical_status - else "", + mapping=lambda a: ( + CLINICAL_STATUS_DISPLAY.get(a.clinical_status, a.clinical_status.title()) + if a.clinical_status + else "" + ), description="Clinical status of the allergy or intolerance", ) + category = Field( + display="Category", + preview_value="Food", + mapping=lambda a: ( + CATEGORY_DISPLAY.get(a.category, a.category.title()) if a.category else "" + ), + description="Category of the allergy or intolerance", + ) verification_status = Field( display="Verification Status", preview_value="Confirmed", - mapping=lambda a: VERIFICATION_STATUS_DISPLAY.get( - a.verification_status, a.verification_status.title() - ) - if a.verification_status - else "", + mapping=lambda a: ( + VERIFICATION_STATUS_DISPLAY.get( + a.verification_status, a.verification_status.title() + ) + if a.verification_status + else "" + ), description="Verification status of the allergy or intolerance", ) criticality = Field( display="Criticality", preview_value="High", - mapping=lambda a: CRITICALITY_DISPLAY.get(a.criticality, a.criticality.title()) - if a.criticality - else "", + mapping=lambda a: ( + CRITICALITY_DISPLAY.get(a.criticality, a.criticality.title()) + if a.criticality + else "" + ), description="Criticality of the allergy or intolerance", ) name = Field( @@ -86,6 +110,17 @@ class AllergyIntoleranceContextBuilder(QuerysetContextBuilder): preview_value="2025-12-03 12:09:13.880000+00:00", description="The last occurrence date and time of the allergy or intolerance", ) + allergy_intolerance_type = Field( + display="Allergy Intolerance Type", + preview_value="Allergy", + mapping=lambda a: ( + ALLERGY_INTOLERANCE_TYPE_DISPLAY.get( + a.allergy_intolerance_type, a.allergy_intolerance_type.title() + ) + if a.allergy_intolerance_type + else "" + ), + ) def get_context(self): return AllergyIntolerance.objects.filter(encounter=self.parent_context) diff --git a/care/emr/reports/context_builder/data_points/diagnosis.py b/care/emr/reports/context_builder/data_points/diagnosis.py index 6926486c61..40c53686ae 100644 --- a/care/emr/reports/context_builder/data_points/diagnosis.py +++ b/care/emr/reports/context_builder/data_points/diagnosis.py @@ -18,6 +18,12 @@ "unknown": "Unknown", } +SEVERITY_DISPLAY = { + "mild": "Mild", + "moderate": "Moderate", + "severe": "Severe", +} + VERIFICATION_STATUS_DISPLAY = { "unconfirmed": "Unconfirmed", "provisional": "Provisional", @@ -46,21 +52,29 @@ class DiagnosisContextBuilder(QuerysetContextBuilder): clinical_status = Field( display="Clinical Status", preview_value="Active", - mapping=lambda c: CLINICAL_STATUS_DISPLAY.get( - c.clinical_status, c.clinical_status.title() - ) - if c.clinical_status - else "", + mapping=lambda c: ( + CLINICAL_STATUS_DISPLAY.get(c.clinical_status, c.clinical_status.title()) + if c.clinical_status + else "" + ), description="Clinical status of the condition", ) + severity = Field( + display="Severity", + preview_value="Mild", + mapping=lambda c: SEVERITY_DISPLAY.get(c.severity, c.severity.title()), + description="Severity of the diagnosis", + ) verification_status = Field( display="Verification Status", preview_value="Confirmed", - mapping=lambda c: VERIFICATION_STATUS_DISPLAY.get( - c.verification_status, c.verification_status.title() - ) - if c.verification_status - else "", + mapping=lambda c: ( + VERIFICATION_STATUS_DISPLAY.get( + c.verification_status, c.verification_status.title() + ) + if c.verification_status + else "" + ), description="Verification status of the condition", ) name = Field( diff --git a/care/emr/reports/context_builder/data_points/diagnostic_report.py b/care/emr/reports/context_builder/data_points/diagnostic_report.py index 9180c8fa14..eef456bfb4 100644 --- a/care/emr/reports/context_builder/data_points/diagnostic_report.py +++ b/care/emr/reports/context_builder/data_points/diagnostic_report.py @@ -25,6 +25,15 @@ def get_context(self): ) +STATUS_DISPLAY = { + "registered": "Registered", + "partial": "Partial", + "preliminary": "Preliminary", + "modified": "Modified", + "final": "Final", +} + + class DiagnosticReportFilter(filters.FilterSet): status = filters.CharFilter(lookup_expr="iexact") @@ -40,9 +49,23 @@ def get_context(self): display="Title", preview_value="Chest X-Ray Report", description="Title of the diagnostic report", - mapping=lambda dr: dr.code.get("display") - if dr.code and dr.code.get("display") - else "", + mapping=lambda dr: ( + dr.code.get("display") if dr.code and dr.code.get("display") else "" + ), + ) + status = Field( + display="Status", + mapping=lambda e: STATUS_DISPLAY.get( + e.status, e.status.title() if e.status else "" + ), + preview_value="In Progress", + description="Current status of the Diagnostic Report", + ) + category = Field( + display="Category", + mapping=lambda c: c.code.get("display") if c.code else "", + preview_value="Audiology", + description="Service category of the report", ) observations = Field( display="Observations", diff --git a/care/emr/reports/context_builder/data_points/medication.py b/care/emr/reports/context_builder/data_points/medication.py index 75643b7051..e957fdbe08 100644 --- a/care/emr/reports/context_builder/data_points/medication.py +++ b/care/emr/reports/context_builder/data_points/medication.py @@ -2,10 +2,12 @@ from django_filters import rest_framework as filters +from care.emr.models import TagConfig from care.emr.models.medication_request import ( MedicationRequest, MedicationRequestPrescription, ) +from care.emr.reports.context_builder import TagFilter from care.emr.reports.context_builder.data_points.base import ( Field, QuerysetContextBuilder, @@ -182,10 +184,42 @@ def get_context(self): return MedicationRequest.objects.filter(prescription=self.parent_context) +class MedicationPrescriptionTagContextBuilder(QuerysetContextBuilder): + filterset_class = TagFilter + __filterset_backends__ = [filters.DjangoFilterBackend] + + display = Field( + display="Tag Display", + preview_value="Preparing", + mapping=lambda t: t.display if t else None, + description="Display of the medication prescription tag", + ) + + def get_context(self): + return TagConfig.objects.filter(id__in=self.parent_context.tags) + + +MEDICATION_PRESCRIPTION_STATUS_DISPLAY = { + "active": "Active", + "on_hold": "On Hold", + "ended": "Ended", + "stopped": "Stopped", + "completed": "Completed", + "cancelled": "Cancelled", + "entered_in_error": "Entered in Error", + "draft": "Draft", +} + + class MedicationPrescriptionContextBuilder(QuerysetContextBuilder): filterset_class = MedicationPrescriptionReportFilter __filterset_backends__ = [filters.DjangoFilterBackend] + name = Field( + display="Name", + preview_value="", + description="Name of the medication prescription", + ) medications = Field( display="Medication", preview_value="", @@ -194,8 +228,13 @@ class MedicationPrescriptionContextBuilder(QuerysetContextBuilder): ) status = Field( display="Status", - preview_value="active", + preview_value="Active", description="Status of the medication prescription", + mapping=lambda m: ( + MEDICATION_PRESCRIPTION_STATUS_DISPLAY.get(m.status, m.status.title()) + if m.status + else "" + ), ) prescribed_by = Field( display="Prescribed By", @@ -203,6 +242,12 @@ class MedicationPrescriptionContextBuilder(QuerysetContextBuilder): target_context=SingleUserRelatedContextBuilder, description="Details of the prescriber", ) + tags = Field( + display="Prescription Tags", + target_context=MedicationPrescriptionTagContextBuilder, + preview_value="", + description="Tags associated with the prescription", + ) note = Field( display="Note", preview_value="", diff --git a/care/emr/reports/context_builder/data_points/service_request.py b/care/emr/reports/context_builder/data_points/service_request.py index 4a2e39376c..7507d50956 100644 --- a/care/emr/reports/context_builder/data_points/service_request.py +++ b/care/emr/reports/context_builder/data_points/service_request.py @@ -1,6 +1,8 @@ from django_filters import rest_framework as filters +from care.emr.models import TagConfig from care.emr.models.service_request import ServiceRequest +from care.emr.reports.context_builder import TagFilter from care.emr.reports.context_builder.data_points.base import ( Field, QuerysetContextBuilder, @@ -42,6 +44,21 @@ } +class ServiceRequestTagContextBuilder(QuerysetContextBuilder): + filterset_class = TagFilter + __filterset_backends__ = [filters.DjangoFilterBackend] + + display = Field( + display="Tag Display", + preview_value="Preparing", + mapping=lambda t: t.display if t else None, + description="Display of the service request tag", + ) + + def get_context(self): + return TagConfig.objects.filter(id__in=self.parent_context.tags) + + class ServiceRequestReportFilterSet(filters.FilterSet): status = MultiSelectFilter(field_name="status") intent = filters.CharFilter(field_name="intent", lookup_expr="iexact") @@ -61,34 +78,34 @@ class ServiceRequestBaseContextBuilder(QuerysetContextBuilder): status = Field( display="Status", preview_value="Active", - mapping=lambda sr: STATUS_CHOICE.get(sr.status, sr.status.title()) - if sr.status - else "", + mapping=lambda sr: ( + STATUS_CHOICE.get(sr.status, sr.status.title()) if sr.status else "" + ), description="Current status of the service request", ) intent = Field( display="Intent", preview_value="Order", - mapping=lambda sr: INTENT_CHOICE.get(sr.intent, sr.intent.title()) - if sr.intent - else "", + mapping=lambda sr: ( + INTENT_CHOICE.get(sr.intent, sr.intent.title()) if sr.intent else "" + ), description="Intent of the service request", ) category = Field( display="Category", preview_value="Laboratory", - mapping=lambda sr: CATEGORY_CHOICE.get(sr.category, sr.category.title()) - if sr.category - else "", + mapping=lambda sr: ( + CATEGORY_CHOICE.get(sr.category, sr.category.title()) if sr.category else "" + ), description="Category of the service request", ) priority = Field( display="Priority", preview_value="Routine", - mapping=lambda sr: PRIORITY_CHOICE.get(sr.priority, sr.priority.title()) - if sr.priority - else "", + mapping=lambda sr: ( + PRIORITY_CHOICE.get(sr.priority, sr.priority.title()) if sr.priority else "" + ), description="Priority level of the service request", ) @@ -98,6 +115,27 @@ class ServiceRequestBaseContextBuilder(QuerysetContextBuilder): preview_value="", description="User who requested the service", ) + occurance = Field( + display="Occurance", + preview_value="2023-01-01", + description="Date and time when service should occur", + ) + patient_instruction = Field( + display="Patient Instruction", + preview_value="Follow up on blood count", + description="Patient or consumer-oriented instructions", + ) + tags = Field( + display="Service Request Tags", + target_context=ServiceRequestTagContextBuilder, + preview_value="", + description="Tags associated with the service request", + ) + note = Field( + display="Note", + preview_value="Sample note", + description="Additional notes about the service request", + ) def get_context(self): return ServiceRequest.objects.filter(encounter=self.parent_context) diff --git a/care/emr/reports/context_builder/data_points/symptom.py b/care/emr/reports/context_builder/data_points/symptom.py index 023580cf02..929e557657 100644 --- a/care/emr/reports/context_builder/data_points/symptom.py +++ b/care/emr/reports/context_builder/data_points/symptom.py @@ -19,6 +19,12 @@ "unknown": "Unknown", } +SEVERITY_DISPLAY = { + "mild": "Mild", + "moderate": "Moderate", + "severe": "Severe", +} + VERIFICATION_STATUS_DISPLAY = { "unconfirmed": "Unconfirmed", "provisional": "Provisional", @@ -47,21 +53,29 @@ class SymptomsContextBuilder(QuerysetContextBuilder): clinical_status = Field( display="Clinical Status", preview_value="Active", - mapping=lambda c: CLINICAL_STATUS_DISPLAY.get( - c.clinical_status, c.clinical_status.title() - ) - if c.clinical_status - else "", + mapping=lambda c: ( + CLINICAL_STATUS_DISPLAY.get(c.clinical_status, c.clinical_status.title()) + if c.clinical_status + else "" + ), description="Clinical status of the condition", ) + severity = Field( + display="Severity", + preview_value="Mild", + mapping=lambda c: SEVERITY_DISPLAY.get(c.severity, c.severity.title()), + description="Severity of the symptom", + ) verification_status = Field( display="Verification Status", preview_value="Confirmed", - mapping=lambda c: VERIFICATION_STATUS_DISPLAY.get( - c.verification_status, c.verification_status.title() - ) - if c.verification_status - else "", + mapping=lambda c: ( + VERIFICATION_STATUS_DISPLAY.get( + c.verification_status, c.verification_status.title() + ) + if c.verification_status + else "" + ), description="Verification status of the condition", ) name = Field( From 79e67198b76d288bc8e45f9f23fafb352dbc5f3c Mon Sep 17 00:00:00 2001 From: rithviknishad Date: Tue, 9 Jun 2026 16:27:45 +0530 Subject: [PATCH 2/3] handle null cases and typos --- care/emr/reports/context_builder/data_points/diagnosis.py | 4 +++- .../reports/context_builder/data_points/diagnostic_report.py | 2 +- .../reports/context_builder/data_points/service_request.py | 2 +- care/emr/reports/context_builder/data_points/symptom.py | 4 +++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/care/emr/reports/context_builder/data_points/diagnosis.py b/care/emr/reports/context_builder/data_points/diagnosis.py index 40c53686ae..a258767460 100644 --- a/care/emr/reports/context_builder/data_points/diagnosis.py +++ b/care/emr/reports/context_builder/data_points/diagnosis.py @@ -62,7 +62,9 @@ class DiagnosisContextBuilder(QuerysetContextBuilder): severity = Field( display="Severity", preview_value="Mild", - mapping=lambda c: SEVERITY_DISPLAY.get(c.severity, c.severity.title()), + mapping=lambda c: ( + SEVERITY_DISPLAY.get(c.severity, c.severity.title()) if c.severity else "" + ), description="Severity of the diagnosis", ) verification_status = Field( diff --git a/care/emr/reports/context_builder/data_points/diagnostic_report.py b/care/emr/reports/context_builder/data_points/diagnostic_report.py index eef456bfb4..cd23946974 100644 --- a/care/emr/reports/context_builder/data_points/diagnostic_report.py +++ b/care/emr/reports/context_builder/data_points/diagnostic_report.py @@ -63,7 +63,7 @@ def get_context(self): ) category = Field( display="Category", - mapping=lambda c: c.code.get("display") if c.code else "", + mapping=lambda c: c.category.get("display") if c.category else "", preview_value="Audiology", description="Service category of the report", ) diff --git a/care/emr/reports/context_builder/data_points/service_request.py b/care/emr/reports/context_builder/data_points/service_request.py index 7507d50956..c1011bae42 100644 --- a/care/emr/reports/context_builder/data_points/service_request.py +++ b/care/emr/reports/context_builder/data_points/service_request.py @@ -116,7 +116,7 @@ class ServiceRequestBaseContextBuilder(QuerysetContextBuilder): description="User who requested the service", ) occurance = Field( - display="Occurance", + display="Occurence", preview_value="2023-01-01", description="Date and time when service should occur", ) diff --git a/care/emr/reports/context_builder/data_points/symptom.py b/care/emr/reports/context_builder/data_points/symptom.py index 929e557657..52a42b6707 100644 --- a/care/emr/reports/context_builder/data_points/symptom.py +++ b/care/emr/reports/context_builder/data_points/symptom.py @@ -63,7 +63,9 @@ class SymptomsContextBuilder(QuerysetContextBuilder): severity = Field( display="Severity", preview_value="Mild", - mapping=lambda c: SEVERITY_DISPLAY.get(c.severity, c.severity.title()), + mapping=lambda c: ( + SEVERITY_DISPLAY.get(c.severity, c.severity.title()) if c.severity else "" + ), description="Severity of the symptom", ) verification_status = Field( From 5d36818c3624961a992ba9443c138008993a858e Mon Sep 17 00:00:00 2001 From: rithviknishad Date: Tue, 9 Jun 2026 17:38:54 +0530 Subject: [PATCH 3/3] fix imports --- .../context_builder/data_points/encounter.py | 2 +- .../context_builder/data_points/medication.py | 2 +- .../context_builder/data_points/patient.py | 44 +++++++++---------- .../data_points/service_request.py | 2 +- .../context_builder/filters/__init__.py | 1 + .../context_builder/filters/tag_filter.py | 6 +++ 6 files changed, 32 insertions(+), 25 deletions(-) create mode 100644 care/emr/reports/context_builder/filters/__init__.py create mode 100644 care/emr/reports/context_builder/filters/tag_filter.py diff --git a/care/emr/reports/context_builder/data_points/encounter.py b/care/emr/reports/context_builder/data_points/encounter.py index 9efa5266ca..a948ef37c4 100644 --- a/care/emr/reports/context_builder/data_points/encounter.py +++ b/care/emr/reports/context_builder/data_points/encounter.py @@ -27,7 +27,6 @@ IdentifiersContextBuilder, PatientMinimumContextBuilder, PatientTagContextBuilder, - TagFilter, ) from care.emr.reports.context_builder.data_points.questionnaire import ( QuestionnaireContextBuilder, @@ -37,6 +36,7 @@ ) from care.emr.reports.context_builder.data_points.symptom import SymptomsContextBuilder from care.emr.reports.context_builder.data_points.user import SingleUserIdContextBuilder +from care.emr.reports.context_builder.filters import TagFilter STATUS_DISPLAY = { "planned": "Planned", diff --git a/care/emr/reports/context_builder/data_points/medication.py b/care/emr/reports/context_builder/data_points/medication.py index e957fdbe08..685f8b18a6 100644 --- a/care/emr/reports/context_builder/data_points/medication.py +++ b/care/emr/reports/context_builder/data_points/medication.py @@ -7,7 +7,6 @@ MedicationRequest, MedicationRequestPrescription, ) -from care.emr.reports.context_builder import TagFilter from care.emr.reports.context_builder.data_points.base import ( Field, QuerysetContextBuilder, @@ -15,6 +14,7 @@ from care.emr.reports.context_builder.data_points.user import ( SingleUserRelatedContextBuilder, ) +from care.emr.reports.context_builder.filters import TagFilter from care.utils.filters.multiselect import MultiSelectFilter STATUS_DISPLAY = { diff --git a/care/emr/reports/context_builder/data_points/patient.py b/care/emr/reports/context_builder/data_points/patient.py index dc78947650..3ec9074fbc 100644 --- a/care/emr/reports/context_builder/data_points/patient.py +++ b/care/emr/reports/context_builder/data_points/patient.py @@ -8,6 +8,7 @@ QuerysetContextBuilder, SingleObjectContextBuilder, ) +from care.emr.reports.context_builder.filters import TagFilter GENDER_CHOICES = { "male": "Male", @@ -34,29 +35,33 @@ def get_context(self): display = Field( display="Display", preview_value="Patient ID", - mapping=lambda ic: ic.config.get("display") - if ic and ic.config and ic.config.get("display") - else None, + mapping=lambda ic: ( + ic.config.get("display") + if ic and ic.config and ic.config.get("display") + else None + ), description="Display of the identifier configuration", ) use = Field( display="Use", preview_value="Official", - mapping=lambda ic: IDENTIFIER_USE_OPTIONS.get( - ic.config.get("use"), ic.config.get("use").title() - ) - if ic and ic.config and ic.config.get("use") - else None, + mapping=lambda ic: ( + IDENTIFIER_USE_OPTIONS.get( + ic.config.get("use"), ic.config.get("use").title() + ) + if ic and ic.config and ic.config.get("use") + else None + ), description="Use of the identifier configuration", ) auto_maintained = Field( display="Auto Maintained", preview_value="False", - mapping=lambda ic: ic.config.get("auto_maintained", False) - if ic and ic.config - else None, + mapping=lambda ic: ( + ic.config.get("auto_maintained", False) if ic and ic.config else None + ), description="Whether the identifier is auto maintained", ) @@ -90,11 +95,6 @@ class PatientTagContextBuilder(QuerysetContextBuilder): ) -class TagFilter(filters.FilterSet): - category = filters.CharFilter(field_name="category") - status = filters.CharFilter(field_name="status") - - class PatientInstanceTagsContextBuilder(PatientTagContextBuilder): filterset_class = TagFilter __filterset_backends__ = [filters.DjangoFilterBackend] @@ -113,9 +113,9 @@ class BasePatientContextBuilder(SingleObjectContextBuilder): gender = Field( display="Patient Gender", preview_value="Male", - mapping=lambda p: GENDER_CHOICES.get(p.gender, p.gender.title()) - if p.gender - else "", + mapping=lambda p: ( + GENDER_CHOICES.get(p.gender, p.gender.title()) if p.gender else "" + ), description="Gender of the patient", ) age = Field( @@ -128,9 +128,9 @@ class BasePatientContextBuilder(SingleObjectContextBuilder): blood_group = Field( display="Patient Blood Group", preview_value="A Positive", - mapping=lambda p: p.blood_group.replace("_", " ").title() - if p.blood_group - else "", + mapping=lambda p: ( + p.blood_group.replace("_", " ").title() if p.blood_group else "" + ), description="Blood group of the patient", ) diff --git a/care/emr/reports/context_builder/data_points/service_request.py b/care/emr/reports/context_builder/data_points/service_request.py index c1011bae42..3c00244822 100644 --- a/care/emr/reports/context_builder/data_points/service_request.py +++ b/care/emr/reports/context_builder/data_points/service_request.py @@ -2,7 +2,6 @@ from care.emr.models import TagConfig from care.emr.models.service_request import ServiceRequest -from care.emr.reports.context_builder import TagFilter from care.emr.reports.context_builder.data_points.base import ( Field, QuerysetContextBuilder, @@ -10,6 +9,7 @@ from care.emr.reports.context_builder.data_points.user import ( SingleUserRelatedContextBuilder, ) +from care.emr.reports.context_builder.filters import TagFilter from care.utils.filters.multiselect import MultiSelectFilter STATUS_CHOICE = { diff --git a/care/emr/reports/context_builder/filters/__init__.py b/care/emr/reports/context_builder/filters/__init__.py new file mode 100644 index 0000000000..102e36a882 --- /dev/null +++ b/care/emr/reports/context_builder/filters/__init__.py @@ -0,0 +1 @@ +from .tag_filter import * diff --git a/care/emr/reports/context_builder/filters/tag_filter.py b/care/emr/reports/context_builder/filters/tag_filter.py new file mode 100644 index 0000000000..9819900cbc --- /dev/null +++ b/care/emr/reports/context_builder/filters/tag_filter.py @@ -0,0 +1,6 @@ +from django_filters import rest_framework as filters + + +class TagFilter(filters.FilterSet): + category = filters.CharFilter(field_name="category") + status = filters.CharFilter(field_name="status")