简体   繁体   English

如何使用 DRF 从 serializerMethodField 仅返回指定字段

[英]How to return only specified fields from serializerMethodField using DRF

It will return nested array like { project_name:test, site_id:[[1],[2]],site_name:[[test1],[test2]] },but I would like to return like this {{sitename:test1, siteid:1},{sitename:test2, siteid:2}}它将返回嵌套数组,如 { project_name:test, site_id:[[1],[2]],site_name:[[test1],[test2]] },但我想像这样返回 {{sitename:test1,站点标识:1},{站点名称:test2,站点标识:2}}

class ProjectSite(models.Model):
    site_id = models.AutoField(primary_key=True, unique=True)
    site_name = models.CharField(max_length=200,name='project_site_name')
    project_id = models.ForeignKey(Project, on_delete=models.CASCADE, blank=True, null=True, 
    related_name="projectid")
class ProjectSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = Project
        fields = '__all__'
class ProjectSiteSerializer(serializers.ModelSerializer):
  
    class Meta:
        model = ProjectSite
        fields = '__all__'
class Serializer(serializers.ModelSerializer):
    ...
    site_ids = serializers.SerializerMethodField(read_only = True)
    site_name = serializers.SerializerMethodField(read_only = True)
    
    ...

    def get_site_ids(self, obj):
        return list(obj.projectid.values_list('id').distinct())
    def get_site_name(self, obj):
        return list(obj.projectid.values_list('site_name').distinct())

I think you can use the ProjectSerializer .我认为您可以使用ProjectSerializer

class ProjectSerializer(serializers.ModelSerializer):
    projectid = ProjectSiteSerializer(many = True, read_only = True)

    class Meta:
        model = Project
        fields = ('project_id', 'project_name', 'projectid',)

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

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