Как скрыть имя вложенного объекта в сериализаторе Django Rest Framework?

У меня есть две модели: Company и ContactCompany

МодельCompany является базовой моделью, а ContactCompany имеет некоторые специфические поля. Они связаны через внешний ключ.

Существуют два сериализатора CompanySerializer и ContactCompanySerializer.

Модели:

class Company(CoreModel):
    name = models.CharField(
        max_length=128,
        verbose_name=_("Company Name"),
        unique=True,
    )

    address = models.TextField(null=True, blank=True, verbose_name=_("Address"))

    sector = models.ForeignKey(
        "contact.Sector",
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        verbose_name=_("Sector"),
        related_name="companies",
    )

    city = models.ForeignKey(
        City,
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
        verbose_name=_("City"),
        related_name="companies",
    )

class ContactCompany(models.Model):

    company = models.ForeignKey(
        Company,
        on_delete=models.CASCADE,
        related_name="contact_companies",
        null=True,
        blank=True,
    )

    note = models.TextField(null=True, blank=True, verbose_name=_("Note"))

    website = models.CharField(
        null=True, blank=True, max_length=128, verbose_name=_("Website")
    )

Сериализаторы:

class ContactCompanySerializer(serializers.ModelSerializer):
    company = CompanySerializer()
    integration_requirements = serializers.ListSerializer(
        child=serializers.CharField(),
        required=False,
    )
    statuses = StatusSerializer(many=True, read_only=True)
    current_status = StatusSerializer(required=False)
    contact_people = ContactPersonSerializer(many=True, read_only=True)
    responsible_company = serializers.CharField(
        source="responsible_company.name", read_only=True
    )

    class Meta:
        model = ContactCompany
        fields = (
            "id",
            "company",
            "website",
            "responsible_company",
            "note",
            "integration_requirements",
            "current_status",
            "statuses",
            "contact_people",
        )

class CompanySerializer(serializers.Serializer):
    name = serializers.CharField()
    is_active = serializers.BooleanField(required=False)
    city = serializers.CharField(source="city.name", required=False, allow_null=True)
    country = serializers.CharField(
        source="city.country.name", required=False, allow_null=True
    )
    sector = serializers.CharField(
        source="sector.name", required=False, allow_null=True
    )

Пример json-ответа:

{
        "id": 1,
        "company": {
            "name": "Company name",
            "is_active": true,
            "city": "City",
            "country": "Country",
            "sector": "Clothing"
        },
        "website": "test",
        "note": "Note"
}

В json ответе я хочу удалить часть "company" и он должен быть таким:

{
        "id": 1,
        "name": "Company name",
        "is_active": true,
        "city": "City",
        "country": "Country",
        "sector": "Clothing"
        "website": "test",
        "note": "Note"
}

Я могу сделать это, напрямую добавив поля модели Company с помощью ключевого слова source в ContactCompanySerializer, но в проекте я буду использовать CompanySerializer, потому что будет больше типов компаний.

Вернуться на верх