python - 返回jsonresponse之前修改serializer.data格式

标签 python django django-rest-framework

我得到-

[
    {
        "id": 2,
        "url": "https://emiactech.com/",
        "title": "",
        "blog_post": 0,
        "index_count": 0,
        "external_urls": "[{'url': '#', 'page': 'https://emiactech.com/', 'title': u''}, {'url': 'https://www.facebook.com/EMIACTechnologies/', 'page': 'https://emiactech.com/', 'title': u'Facebook'}, {'url': 'https://twitter.com/emiactech', 'page': 'https://emiactech.com/', 'title': u'Twitter'}, {'url': 'mailto:sales@emiactech.com', 'page': 'https://emiactech.com/', 'title': u'sales@emiactech.com'}, {'url': 'http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226?ref=ThemeFusion', 'page': 'https://emiactech.com/about-us/', 'title': u''}, {'url': '#tab-bdf4143f2c7b5609720', 'page': 'https://emiactech.com/services/', 'title': u'Web Design and Development'}, {'url': '#tab-70d2572b15f9a5ac477', 'page': 'https://emiactech.com/services/', 'title': u'Content Development'}, {'url': '#tab-c59a00bf26295e6ed39', 'page': 'https://emiactech.com/services/', 'title': u'Digital Marketing'}, {'url': 'https://emiactech.com', 'page': 'https://emiactech.com/cqpim-client/', 'title': u'Home'}, {'url': 'http://themetf.com', 'page': 'https://emiactech.com/portfolio-items/humsafar-love/', 'title': u' theme-tf'}, {'url': 'http://shades.salon', 'page': 'https://emiactech.com/portfolio_category/jquery/', 'title': u'http://shades.salon'}, {'url': 'http://Project%20URL', 'page': 'https://emiactech.com/portfolio_category/jquery/', 'title': u' View Project '}, {'url': 'http://samacharjagat.com', 'page': 'https://emiactech.com/portfolio_category/jquery/', 'title': u'http://samacharjagat.com'}]",
        "external_count": 13
    }]

serializer.data中。 external_urls关键数据是字符串类型。我需要列表或字典形式的关键数据,如下所示;

[{'url': '#', 'page': 'https://emiactech.com/', 'title': u''}, {'url': 'https://www.facebook.com/EMIACTechnologies/', 'page': 'https://emiactech.com/', 'title': u'Facebook'}, {'url': 'https://twitter.com/emiactech', 'page': 'https://emiactech.com/', 'title': u'Twitter'}, {'url': 'mailto:sales@emiactech.com', 'page': 'https://emiactech.com/', 'title': u'sales@emiactech.com'}, {'url': 'http://themeforest.net/item/avada-responsive-multipurpose-theme/2833226?ref=ThemeFusion', 'page': 'https://emiactech.com/about-us/', 'title': u''}, {'url': '#tab-bdf4143f2c7b5609720', 'page': 'https://emiactech.com/services/', 'title': u'Web Design and Development'}, {'url': '#tab-70d2572b15f9a5ac477', 'page': 'https://emiactech.com/services/', 'title': u'Content Development'}, {'url': '#tab-c59a00bf26295e6ed39', 'page': 'https://emiactech.com/services/', 'title': u'Digital Marketing'}, {'url': 'https://emiactech.com', 'page': 'https://emiactech.com/cqpim-client/', 'title': u'Home'}, {'url': 'http://themetf.com', 'page': 'https://emiactech.com/portfolio-items/humsafar-love/', 'title': u' theme-tf'}, {'url': 'http://shades.salon', 'page': 'https://emiactech.com/portfolio_category/jquery/', 'title': u'http://shades.salon'}, {'url': 'http://Project%20URL', 'page': 'https://emiactech.com/portfolio_category/jquery/', 'title': u' View Project '}, {'url': 'http://samacharjagat.com', 'page': 'https://emiactech.com/portfolio_category/jquery/', 'title': u'http://samacharjagat.com'}]

<---------------------更新-------------------->

序列化器.py

class WebsiteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Website
        fields = '__all__'

模型.py

class Website(models.Model):
    url = models.CharField(max_length=200)
    title = models.CharField(max_length=255, blank=True,)
    blog_post = models.IntegerField(default=170, blank=True,)
    index_count = models.IntegerField(blank=True,)
    external_urls = models.TextField(blank=True, null=True)
    external_count = models.IntegerField(blank=True,)

    class Meta:
        db_table = "website"

最佳答案

您可以使用serializermethodfield

from ast import literal_eval


class WebsiteSerializer(serializers.ModelSerializer):
     external_urls = serializers.SerializerMethodField()

     def get_external_urls(self, obj):
         # return eval(obj.external_urls) will work
         return literal_eval(obj.external_urls)

关于python - 返回jsonresponse之前修改serializer.data格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46581829/

相关文章:

python - Mechanize 提交

管理 save_model 中的 django ValidationError

Django休息框架: Prevent duplicate objects when using CreateModelMixin

python - 如何将 libsass 配置变量传递到 flask_assets 包中?

python - python 中的可变默认值

django - 带有 Django 休息框架的 manyToMany

Django:制作具有未定义字段数的模型

django - 使用 Django Rest Framework 的自定义验证错误消息

mongodb - EmbeddedDocumentSerializer 为每个 ReferenceField 运行查询

python - 如何检查 Django 模型数据类型?