feat(#49): return FK details in department and municipality serializers
- DepartmentSerializer adds country_detail (nested country object) - MunicipalitySerializer adds department_detail and country_detail - Writable FK id fields kept for create/update - Move geography brief serializers to serializers/geography.py
This commit is contained in:
@@ -9,13 +9,38 @@ class CountrySerializer(serializers.ModelSerializer):
|
|||||||
fields = ["id", "name", "code"]
|
fields = ["id", "name", "code"]
|
||||||
|
|
||||||
|
|
||||||
class DepartmentSerializer(serializers.ModelSerializer):
|
class CountryBriefSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Country
|
||||||
|
fields = ["id", "name", "code"]
|
||||||
|
|
||||||
|
|
||||||
|
class DepartmentBriefSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Department
|
model = Department
|
||||||
fields = ["id", "name", "country"]
|
fields = ["id", "name"]
|
||||||
|
|
||||||
|
|
||||||
|
class MunicipalityBriefSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Municipality
|
||||||
|
fields = ["id", "name"]
|
||||||
|
|
||||||
|
|
||||||
|
class DepartmentSerializer(serializers.ModelSerializer):
|
||||||
|
country_detail = CountryBriefSerializer(source="country", read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Department
|
||||||
|
fields = ["id", "name", "country", "country_detail"]
|
||||||
|
|
||||||
|
|
||||||
class MunicipalitySerializer(serializers.ModelSerializer):
|
class MunicipalitySerializer(serializers.ModelSerializer):
|
||||||
|
department_detail = DepartmentBriefSerializer(
|
||||||
|
source="department", read_only=True
|
||||||
|
)
|
||||||
|
country_detail = CountryBriefSerializer(source="country", read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Municipality
|
model = Municipality
|
||||||
fields = ["id", "name", "department", "country"]
|
fields = ["id", "name", "department", "department_detail", "country", "country_detail"]
|
||||||
|
|||||||
@@ -1,25 +1,11 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from ..models.geography import Country, Department, Municipality
|
|
||||||
from ..models.provenance import Organization, Supplier
|
from ..models.provenance import Organization, Supplier
|
||||||
|
from .geography import (
|
||||||
|
CountryBriefSerializer,
|
||||||
class CountryBriefSerializer(serializers.ModelSerializer):
|
DepartmentBriefSerializer,
|
||||||
class Meta:
|
MunicipalityBriefSerializer,
|
||||||
model = Country
|
)
|
||||||
fields = ["id", "name", "code"]
|
|
||||||
|
|
||||||
|
|
||||||
class DepartmentBriefSerializer(serializers.ModelSerializer):
|
|
||||||
class Meta:
|
|
||||||
model = Department
|
|
||||||
fields = ["id", "name"]
|
|
||||||
|
|
||||||
|
|
||||||
class MunicipalityBriefSerializer(serializers.ModelSerializer):
|
|
||||||
class Meta:
|
|
||||||
model = Municipality
|
|
||||||
fields = ["id", "name"]
|
|
||||||
|
|
||||||
|
|
||||||
class OrganizationSerializer(serializers.ModelSerializer):
|
class OrganizationSerializer(serializers.ModelSerializer):
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
from ..serializers.provenance import (
|
from ..serializers.geography import (
|
||||||
CountryBriefSerializer,
|
CountryBriefSerializer,
|
||||||
DepartmentBriefSerializer,
|
DepartmentBriefSerializer,
|
||||||
MunicipalityBriefSerializer,
|
MunicipalityBriefSerializer,
|
||||||
|
)
|
||||||
|
from ..serializers.provenance import (
|
||||||
OrganizationBriefSerializer,
|
OrganizationBriefSerializer,
|
||||||
SupplierBriefSerializer,
|
SupplierBriefSerializer,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -219,6 +219,28 @@ class TestProvenanceCRUD(APITestCase, LoginMixin):
|
|||||||
self.assertEqual(data["municipality_detail"]["name"], "La Mesa")
|
self.assertEqual(data["municipality_detail"]["name"], "La Mesa")
|
||||||
self.assertIn("products", data)
|
self.assertIn("products", data)
|
||||||
|
|
||||||
|
def test_department_serializer_includes_country_detail(self):
|
||||||
|
response = self.client.get(
|
||||||
|
f"/don_confiao/api/departments/{self.department.id}/"
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
data = response.json()
|
||||||
|
self.assertEqual(data["country"], self.country.id)
|
||||||
|
self.assertEqual(data["country_detail"]["name"], "Colombia")
|
||||||
|
self.assertEqual(data["country_detail"]["code"], "CO")
|
||||||
|
|
||||||
|
def test_municipality_serializer_includes_fk_details(self):
|
||||||
|
response = self.client.get(
|
||||||
|
f"/don_confiao/api/municipalities/{self.municipality.id}/"
|
||||||
|
)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
data = response.json()
|
||||||
|
self.assertEqual(data["department"], self.department.id)
|
||||||
|
self.assertEqual(data["department_detail"]["name"], "Cundinamarca")
|
||||||
|
self.assertEqual(data["country"], self.country.id)
|
||||||
|
self.assertEqual(data["country_detail"]["name"], "Colombia")
|
||||||
|
self.assertEqual(data["country_detail"]["code"], "CO")
|
||||||
|
|
||||||
def test_link_product_to_suppliers_via_product_api(self):
|
def test_link_product_to_suppliers_via_product_api(self):
|
||||||
product = Product.objects.create(name="Panela", price=5000)
|
product = Product.objects.create(name="Panela", price=5000)
|
||||||
supplier2 = Supplier.objects.create(name="Proveedor 2")
|
supplier2 = Supplier.objects.create(name="Proveedor 2")
|
||||||
|
|||||||
Reference in New Issue
Block a user