from rest_framework import serializers from outbo.apps.core.serializers import PolymorphicSerializer from outbo.apps.organizations.models import ( AgencyOrganization, ClientOrganization, SupplierOrganization, Brand, Category, Organization, ) # Organizations class _BaseOrganizationSerializer(serializers.ModelSerializer): class Meta: fields = ( "id", "name", ) class _OrganizationSerializer: class List(_BaseOrganizationSerializer): class Meta(_BaseOrganizationSerializer.Meta): model = Organization class _AgencyOrganizationSerializer: class List(_BaseOrganizationSerializer): class Meta(_BaseOrganizationSerializer.Meta): model = AgencyOrganization class _ClientOrganizationSerializer: class List(_BaseOrganizationSerializer): class Meta(_BaseOrganizationSerializer.Meta): model = ClientOrganization class _SupplierOrganizationSerializer: class List(_BaseOrganizationSerializer): class Meta(_BaseOrganizationSerializer.Meta): model = SupplierOrganization class _BaseOrganizationPolymorphicSerializer(PolymorphicSerializer): model_serializer_mapping = { AgencyOrganization: _AgencyOrganizationSerializer.List, ClientOrganization: _ClientOrganizationSerializer.List, SupplierOrganization: _SupplierOrganizationSerializer.List, Organization: _OrganizationSerializer.List, } class OrganizationSerializer: class Retrieve(_BaseOrganizationPolymorphicSerializer): pass class List(_BaseOrganizationPolymorphicSerializer): pass # Brands class _BaseBrandSerializer(serializers.ModelSerializer): class Meta: model = Brand fields = ["name"] class BrandSerializer(serializers.ModelSerializer): # Create & Update not needed class Retrieve(_BaseBrandSerializer): pass class List(_BaseBrandSerializer): class Meta(_BaseBrandSerializer.Meta): fields = ["id"] + _BaseBrandSerializer.Meta.fields # Categories class _BaseCategorySerializer(serializers.ModelSerializer): class Meta: model = Category fields = ["name"] class CategorySerializer: class Retrieve(_BaseCategorySerializer): pass class List(_BaseCategorySerializer): class Meta(_BaseCategorySerializer.Meta): fields = ["id"] + _BaseCategorySerializer.Meta.fields