from rest_framework import serializers from apps.sync.models import CitySite class CitySiteSerializer(serializers.ModelSerializer): id = serializers.IntegerField(source="pk", read_only=True) # Never echo the outbound city API key back to the browser by default. has_api_key = serializers.SerializerMethodField() registered_by_name = serializers.CharField( source="registered_by.user_name", read_only=True, allow_null=True ) class Meta: model = CitySite fields = [ "id", "code", "name", "api_base_url", "has_api_key", "registered_by", "registered_by_name", "is_active", "last_synced_at", "last_sync_status", "last_sync_message", "created_at", "updated_at", ] read_only_fields = [ "id", "has_api_key", "registered_by", "registered_by_name", "last_synced_at", "last_sync_status", "last_sync_message", "created_at", "updated_at", ] def get_has_api_key(self, obj: CitySite) -> bool: return bool(obj.api_key) class CitySiteWriteSerializer(serializers.ModelSerializer): id = serializers.IntegerField(source="pk", read_only=True) class Meta: model = CitySite fields = [ "id", "code", "name", "api_base_url", "api_key", "is_active", ] extra_kwargs = {"api_key": {"write_only": True, "required": False}}