簡體   English   中英

DRF - 如何使用序列化程序加載相關數據

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

我有一個與自己相關的表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時,我可以使用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"           #
       #}                              #
       #################################
        }
    }
]

試試這個配置,

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