【问题标题】:Django REST Framework Serialization of ManyRelatedFieldManyRelatedField 的 Django REST Framework 序列化
【发布时间】:2013-12-09 12:36:48
【问题描述】:

我正在尝试使用 Django Rest 框架序列化我的模型 - http://django-rest-framework.org/

我想要的是序列化一个包含多对多关系的模型:

class ImageResource(models.Model):
    # Some code here
    image = models.ImageField(upload_to=upload_images_to)
    keywords = models.ManyToManyField('cards.Keyword', related_name='image_keywords', blank=True);
    # More code here

这是我的模型(我删除了一些字段以帮助您专注于关键字字段)

我的序列化器看起来像这样:

class ImageResourceSerializer(serializers.HyperlinkedModelSerializer):
    keywords = serializers.ManyRelatedField(source='keywords')

    class Meta:
        model = ImageResource
        fields = ('id', 'url', 'image', 'keywords')

我要展示的最后一件事是 API 的结果

{
        "id": 2, 
        "url": "http://127.0.0.1:3004/apiimageresource/2/", 
        "image": "images/1386508612-97_img-02.JPG", 

        "keywords": [
            "birthday", 
            "cake"
        ]
    },

如您所见,关键字从字符串(它们的名称)作为数组返回。我的愿望是将它们作为键值对返回,并带有它们的 id 和值:

"keywords": [
    "1":"birthday",
    "3":"cake"
]

如果您知道如何使用我的序列化程序来做到这一点,我将不胜感激 :)

【问题讨论】:

    标签: django serialization django-rest-framework


    【解决方案1】:

    创建自定义序列化程序:

    class MyKeywordsField(serializers.RelatedField):
        def to_native(self, value):
            return { str(value.pk): value.name }
    

    使用它:

    class ImageResourceSerializer(serializers.HyperlinkedModelSerializer):
        keywords = MyKeywordsField(many=True)
        # ...
    

    【讨论】:

      猜你喜欢
      • 2015-06-29
      • 2015-01-12
      • 2016-07-21
      • 2015-12-13
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      相关资源
      最近更新 更多