如何在drf中更改多对多关系格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在drf中更改多对多关系格式相关的知识,希望对你有一定的参考价值。

这是我的序列化程序类

class ProjectSerializer(ModelSerializer):
    created_by = SlugRelatedField(read_only=True, slug_field='email')
    updated_by = SlugRelatedField(read_only=True, slug_field='email')
    team = SlugRelatedField(many=True, read_only=True, slug_field='first_name')
    class Meta:
       model = Project
       exclude = ['deleted_at']

这是Models.py

class Project(MandatoryFields, Model):  
    project_name = models.CharField(max_length=255, blank=True)
    project_areas = models.CharField(max_length=255, blank=True)
    team = models.ManyToManyField(
        settings.AUTH_USER_MODEL, blank=True, related_name="%(app_label)s_%(class)s_team")
    project_manager = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True,
        related_name="%(app_label)s_%(class)s_project_manager")       
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)

    REQUIRED_FIELDS = []

    def __str__(self):
        return self.project_name

我正在收到这样的回复

"status": true,
    "data": [
        
            "id": 1,
            "created_by": "abc@google.com",
            "updated_by": "abc@google.com",
            "project_manager": "abc@google.com",
            "team": ["Rahul",
             "Anoop",
             ],
            "created_date": "2020-01-16T05:18:58.471601Z",
            "modified_date": "2020-01-16T05:18:58.471662Z",
            "project_name": "ABC",
            "project_areas": "ABC",
            "start_date": null,
            "end_date": null,
        ,

我的问题是团队与用户模型之间存在许多关系。我需要改变现场团队的反应。它需要以字典格式返回ID和名称。

我该如何更改

 "team": [
        
            "id": 1,
            "name": "Rahul",
        ,
        
            "id": 2,
            "name": "Anoop",
        
    ], 
答案

[Nested Serializer (TeamSerializer)并将其连接到您的TeamSerializer中,作为>]ProjectSerializer

我在这里也使用了from django.contrib.auth import get_user_model class TeamSerializer(serializers.ModelSerializer): name = serializers.CharField(source='first_name') class Meta: model = get_user_model() fields = ('id', 'name') class ProjectSerializer(ModelSerializer): created_by = SlugRelatedField(read_only=True, slug_field='email') updated_by = SlugRelatedField(read_only=True, slug_field='email') team = TeamSerializer(many=True, read_only=True) class Meta: model = Project exclude = ['deleted_at']参数,该参数用于指定要提取的数据源。

Update-1


使用

source

source

以上是关于如何在drf中更改多对多关系格式的主要内容,如果未能解决你的问题,请参考以下文章

0015 DRF框架开发(02 创建模型)

雄辩的多对多对多 - 如何轻松加载远距离关系

DRF 多对多序列化

如何在多对多关系中更新日期

Django DRF 视图过滤多对多查询集

多对多表的增删改查与drf的分页