Django REST Framework i ogólne relacje

Problem

Mam model z następującymi standardowymi ogólnymi polami klucza obcego:

content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
event_object = generic.GenericForeignKey('content_type', 'object_id')

Zgodnie z dokumentami ramowymi REST mogę wykonać następujące czynności, aby poprawnie je serializować:

class WhateverSerializer(serializers.ModelSerializer):
    event_object = serializers.RelatedField(source='event_object')

Działa to dobrze, jednak w dwóch innych powiązanych sytuacjach nie mogę działać:

Chciałbym użyćHyperlinkedRelatedField. To pole wymaga argumentu view_name, czegoś, czego nie mogę zadeklarować, ponieważ nazwa widoku różni się w zależności od powiązanego modelu. Rozwiązałem to za pomocąSerializerMethodField, tworzy instancję aHyperlinkedIdentityField w czasie wykonywania i zwracając jegofield_to_native metoda (patrz fragment poniżej). To nie jest zbyt eleganckie.Chciałbym zagnieździć powiązany obiekt bezpośrednio w serializacji, mówiącevent_object = SoAndSoSerializer(source='event_object'). Jedyne rozwiązanie, jakie widzę, to chodzić każdy*Serializer Zdefiniowałem i sprawdzam, który model ma poprawny, a następnie go użyję. Ponownie, nie jest to zbyt eleganckie.

pytania

jest HyperlinkRelatedField przeznaczony do pracy w relacji ogólnej? Czy właśnie popełniam błąd? Czy istnieje oczywiste rozwiązanie wyboru właściwego*Serializer że tęsknię?

Fragment kodu

Nieeleganckie rozwiązanie wymienione w punkcie 1 powyżej:

class WhateverSerializer(DefaultSerializer):

    event_object_url = serializers.SerializerMethodField('get_related_object_url')
    # ...

    def get_related_object_url(self, obj):
        obj = obj.event_object
        default_view_name = '%(model_name)s-detail'
        format_kwargs = {
            'app_label': obj._meta.app_label,
            'model_name': obj._meta.object_name.lower()
        }
        view_name = default_view_name % format_kwargs
        s = serializers.HyperlinkedIdentityField(source=obj, view_name=view_name)
        s.initialize(self, None)
        return s.field_to_native(obj, None)

questionAnswers(1)

yourAnswerToTheQuestion