95 lines
2.4 KiB
Python
Executable File
95 lines
2.4 KiB
Python
Executable File
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
|