簡體   English   中英

Django Rest 框架(DRF)如何獲取GenericRelation字段的值?

[英]Django Rest Framework (DRF) how to get value of GenericRelation field?

在我的 models.py 中,我有一個“電影”model,其字段設置如下:

video_stream_relation = GenericRelation(VideoStreamInfo, related_query_name='video_stream_relation')

此 GenericRelation 字段指向以下 model class:

class VideoStreamInfo(models.Model):
    objects = RandomManager()
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    content_type = models.ForeignKey(ContentType, limit_choices_to=referential_stream_models, on_delete=models.CASCADE, verbose_name=_("Content Type"))
    object_id = models.CharField(max_length=36, verbose_name=_("Object ID"))
    content_object = GenericForeignKey('content_type', 'object_id')
    index = models.IntegerField(verbose_name=_("Stream Index"), blank=False)
    bit_rate = models.IntegerField(verbose_name=_("Bitrate (bps)"), blank=True, null=True, editable=False)
    codec_name = models.CharField(verbose_name=_("Codec Name"), blank=True, null=True, editable=False, max_length=255)
    width = models.IntegerField(verbose_name=_("Width"), blank=True, null=True, editable=False)
    height = models.IntegerField(verbose_name=_("Height"), blank=True, null=True, editable=False)
    date_added = models.DateTimeField(auto_now_add=True, verbose_name=_("Date Added"))

現在的問題是如何在 ModelSerializer 中獲取 video_stream_relation.codec_name 值,如下所示:

class MovieSerializer(serializers.ModelSerializer):
    id = serializers.PrimaryKeyRelatedField(queryset=Movies.objects.all())
    class Meta:
        model = Movies
        fields = ('id',
                  ...)

我希望能夠將 codec_name 顯示為 API JsonResponse。

如果需要,這就是我的 API 視圖當前的樣子:

@api_view(['GET',])
@authentication_classes([JSONWebTokenAuthentication])
@permission_classes([AllowAny])
def movies(request):
    if request.method == 'GET':
        obj = Movies.objects.all()
        serializer = MovieSerializer(obj, many=True)
        return JsonResponse(serializer.data, safe=False)

如果我嘗試將 video_stream_relation 字段添加到我的 MovieSerializer,我會返回以下錯誤:

類型錯誤:GenericRelatedObjectManager 類型的 Object 不是 JSON 可序列化

提前致謝。

您可以為VideoStreamInfo創建一個 model 序列化程序,並在MovieSerializer其用作相關管理器,如下所示:

from rest_framework import serializers


class VideoStreamInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = VideoStreamInfo
        fields = ('codec_name', )


class MovieSerializer(serializers.ModelSerializer):
    video_stream_relation = VideoStreamInfoSerializer(many=True, read_only=True)
    id = serializers.PrimaryKeyRelatedField(queryset=Movies.objects.all())

    class Meta:
        model = Movies
        fields = ('id',
                  'video_stream_relation',
                  ...
                  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM