简体   繁体   English

DRF - 如何使用序列化程序加载相关数据

[英]DRF - How to using serializer to load related data

I have a self related table Employee , and Project table has foreignkey to related to Employee table.我有一个与自己相关的表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)

and serializers.pyserializers.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

I hope when request ProjectListView I can get teamleaderid with team_member data but I don't know why team_member not show in my response.我希望在请求ProjectListView时,我可以使用team_member数据获得teamleaderid ,但我不知道为什么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"           #
       #}                              #
       #################################
        }
    }
]

Try this config,试试这个配置,

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__'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM