DRF - Как использовать сериализатор для загрузки связанных данных
У меня есть самосвязанная таблица Employee
, и таблица Project
имеет внешний ключ, связанный с таблицей Employee
.
class Employee(models.Model):
eid = models.CharField(primary_key=True, max_length=10)
name = models.CharField(max_length=10)
pmid = models.ForeignKey('self', models.RESTRICT, related_name='team_member', blank=True, null=True,)
class Project(models.Model):
pid = models.CharField(primary_key=True, max_length=10)
description = models.CharField(max_length=100)
teamleaderid = models.ForeignKey(Employee, models.RESTRICT)
и serializers.py
class SubEmployeeSerializer(serializers.ModelSerializer):
class Meta:
model = Employee
fields = '__all__'
class EmployeeSerializer(serializers.ModelSerializer):
team_member = SubEmployeeSerializer(many=True, read_only=True)
class Meta:
model = Employee
fields = '__all__'
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = '__all__'
depth = 1
views.py
class ProjectList(generics.ListAPIView):
queryset = Project.objects.all()
serializer_class = ProjectSerializer
Я надеюсь, что при запросе ProjectListView
я смогу получить teamleaderid
с данными team_member
но я не знаю, почему team_member
не отображается в моем ответе.
[
{
"pid": "p1",
"description": "p1 project",
"teamleaderid": {
"eid": "1",
"name": "n1",
"pmid": null,
###### how to show below data ###
# "team_member": [ #
# { #
# "eid": "5", #
# "name": "n5", #
# "pmid": "1" #
#} #
#################################
}
}
]
Попробуйте эту конфигурацию,
class EmployeeSerializer(serializers.ModelSerializer):
team_member = SubEmployeeSerializer(read_only=True, source="pmid")
class Meta:
model = Employee
fields = '__all__'
class ProjectSerializer(serializers.ModelSerializer):
teamleaderid = EmployeeSerializer(read_only=True)
class Meta:
model = Project
fields = '__all__'