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
]