Django - ссылки на API отображаются в виде сериализаторов

Мой API выглядит примерно так

{
    "id": 7,
    "url": "http://127.0.0.1:8000/workers/7/",
    "first_name": "ellie",
    "last_name": "hodjayev",
    "email": "zenmyx@gmail.com",
    "phone_number": 502461700,
    "hire_date": "2022-06-18",
    "job": 1,
    "speciality": 5,
    "salary": 17000,
    "commission_pct": 0,
    "manager_id": 0,
    "department_id": 0
}

"работа" и "специальность" должны отображаться как ссылки, поскольку они настроены на serializers.hyperlinkedmodeserializers, но вместо этого мы видим серийный номер

Из приведенного ниже фрагмента следует, что все настроено правильно...

serialize.py

from rest_framework import serializers
from .models import Worker, Speciality, Job


class WorkerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Worker
        fields = ['id', 'url', 'first_name', 'last_name', 'email', 'phone_number', 'hire_date', 'job',
                  'speciality', 'salary', 'commission_pct', 'manager_id', 'department_id']


class SpecialitySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Speciality
        fields = ['id', 'url', 'speciality']


class JobSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Job
        fields = ['id', 'url', 'job']

Я рекомендую вам прочитать эту часть документа rest framework.

нужно добавить два новых метода SerializerMethodField для WorkerSerializer и там возвращаете то, что хотите, а потом WorkerSerializer вызывает их и показывает в конечном результате.


class WorkerSerializer(serializers.ModelSerializer):
    custom_job = serializers.SerializerMethodField()
    custom_speciality = serializers.SerializerMethodField()

    def get_custom_job(self, obj):
        return obj.job.url

    def get_custom_speciality(self, obj):
        return obj.speciality.url

    class Meta:
        model = Worker
        fields = [
            "id",
            "url",
            "first_name",
            "last_name",
            "email",
            "phone_number",
            "hire_date",
            "salary",
            "commission_pct",
            "manager_id",
            "department_id",
            "custom_job", # your custom field
            "custom_speciality", # your custom field

        ]


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