当前位置: 首页 > 面试题库 >

django-rest-framework + django-polymorphic ModelSerialization

富凯风
2023-03-14
问题内容

我想知道是否有人将Django REST框架与django-polymorphic相结合的Pythonic解决方案。

鉴于:

class GalleryItem(PolymorphicModel):
    gallery_item_field = models.CharField()

class Photo(GalleryItem):
    custom_photo_field = models.CharField()

class Video(GalleryItem):
    custom_image_field = models.CharField()

如果我想要django-rest-
framework中所有GalleryItem的列表,它只会给我GalleryItem(父模型)的字段,因此是:id,gallery_item_field和polymorphic_ctype。那不是我想要的
我想要custom_photo_field如果它是一个Photo实例,并且想要custom_image_field如果它是一个Video。


问题答案:

到目前为止,我仅对GET请求进行了测试,并且可以正常工作:

class PhotoSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.Photo


class VideoSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.Video


class GalleryItemModuleSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.GalleryItem

    def to_representation(self, obj):
        """
        Because GalleryItem is Polymorphic
        """
        if isinstance(obj, models.Photo):
            return PhotoSerializer(obj, context=self.context).to_representation(obj)
        elif isinstance(obj, models.Video):
           return VideoSerializer(obj, context=self.context).to_representation(obj)
        return super(GalleryItemModuleSerializer, self).to_representation(obj)

对于POST和PUT请求,您可能需要做一些类似的事情,例如用to_internal_value def覆盖to_representation定义。



 类似资料:
  • Django REST Framework 这个名字很直白,就是基于 Django 的 REST 框架。

  • 我用ImageField创建了一个简单的模型,我想用django-rest-framework+django-rest-swagger创建一个api视图,它是文档化的,并且能够上传文件。 以下是我得到的: 我阅读了django-rest-framework中的这部分文档: 我正在使用、和。

  • 问题内容: 给定具有JSONField的Django模型,使用对其进行序列化和反序列化的正确方法是什么? 我已经尝试过创建一个自定义和覆盖和: 但是,当我尝试使用来更新模型时,JSONField对象中的所有浮点数都变为字符串。 问题答案: 如果你使用的是Django Rest Framework> = 3.3,那么现在将包含 JSONField序列化程序。现在这是正确的方法。 如果你使用的是Dja

  • 问题内容: 我知道有关于Django Rest Framework的答案,但找不到我的问题的解决方案。 我有一个具有身份验证和某些功能的应用程序。我向其中添加了一个新应用,该应用使用Django Rest Framework。我只想在此应用程序中使用库。我也想发出POST请求,并且总是收到以下响应: 我有以下代码: 我想添加API而不影响当前的应用程序。因此,我的问题是如何仅对此应用程序禁用CSR

  • 问题内容: 我在理解和挣扎中挣扎。我想将其用作序列化器上的字段。我有一个可能包含许多内容的。我试图写一个序列化器,如下所示: 我知道,这没有任何意义,因为文档说了并以此为依据。因此,以上代码自然会引发错误: TypeError: init ()获得了意外的关键字参数’stops_left’ 期望的输出 如何实现呢?是一个列表,可能包含我想要的尽可能多的元素。 python 3.5.1 Django

  • Django REST framework 是一个强大且灵活的工具包,用以构建 Web APIs。文章翻译自官方网站,部分内容有增删。