Как вернуть только указанные поля из serializerMethodField с помощью DRF

Возвращается вложенный массив вида { имя_проекта:test, site_id:[[1],[2]], site_name:[[test1],[test2]]). }, но я бы хотел вернуть вот так {{sitename:test1, siteid:1},{sitename:test2, siteid: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())

Думаю, вы можете использовать ProjectSerializer.

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

    class Meta:
        model = Project
        fields = ('project_id', 'project_name', 'projectid',)
Вернуться на верх