Как получить отношение из отношения в сериализаторе?

У меня есть 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)

Теперь мне нужны все идентификаторы фестивалей, на которых выступает артист. У меня есть сериализатор следующего вида:

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

Но это дает мне только идентификаторы событий. Есть идеи, как пройти через событие к фестивалю?

Заранее спасибо

Думаю, вам нужно добавить пользовательское поле для этого.

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())
Вернуться на верх