如何从序列化器中的关系中获取关系?

How to get a relation from a relation in a serializer?

我有 3 个模型:

class Artist(Timestamps):
    name = models.CharField('Name', max_length=255, blank=True)
    ...

class Festival(Timestamps):
    name = models.CharField(max_length=255, blank=True)
    ...

class Event(Timestamps):
    artist = models.ForeignKey(Artist, on_delete=models.CASCADE, null=True)
    festival = models.ForeignKey(Festival, on_delete=models.CASCADE, null=True)

现在我不想要艺术家正在演奏的音乐节的所有 ID。我有一个像这样的序列化器:

class ArtistFestivalSerializer(serializers.ModelSerializer):
    class Meta:
        model = Artist
        fields = ('id', 'name', 'event_set')

但这只给了我事件的 ID。关于如何通过活动进入节日有什么想法吗?

提前致谢

编辑 - 视图是:

class FestivalArtists(generics.ListAPIView):
    serializer_class = ArtistFestivalSerializer
    def get_queryset(self):
        queryset = Artist.objects.prefetch_related('event_set').filter(event__isnull=False).distinct().order_by('name')
        return queryset

我认为您需要为此添加自定义字段。

class ArtistFestivalSerializer(serializers.ModelSerializer):
    festival_ids = serializers.SerializerMethodField(read_only = True)

    class Meta:
        model = Artist
        fields = ('id', 'name', 'event_set', 'festival_ids')

    def get_festival_ids(self, obj):
        return list(Event.objects.filter(artist = obj).values_list('festival_id').distinct())