繁体   English   中英

作为JSON字符串数组而不是键值数组返回

[英]Return as JSON string array instead of Key-Value array

我正在使用Django编写Web服务,并尝试创建一个API,该API返回MySQL数据库中表中的所有不同类别。 表模式如下所示:

+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| news_id       | int(11)      | YES  | MUL | NULL    |                |
| news_category | varchar(50)  | YES  |     | NULL    |                |
| publish_date  | varchar(50)  | YES  |     | NULL    |                |
| news_link     | varchar(255) | NO   |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+

这里的news_category字段不是唯一的。 我希望API以以下JSON格式列出所有不同的类别:

{
    "count": 22,
    "next": null,
    "previous": null,
    "results": ["apple", "google", "microsoft", "apps", "photography", "virtual-reality", "business"]
}

以下是我的models.py

from django.db import models
...
class NewsInfo(models.Model):
    news = models.ForeignKey(NewsContent, models.DO_NOTHING, blank=True, null=True)
    news_category = models.CharField(max_length=50, blank=True, null=True)
    publish_date = models.CharField(max_length=50, blank=True, null=True)
    news_link = models.CharField(max_length=255)

    def __str__(self):
        return self.news.news_title

    class Meta:
        managed = False
        db_table = 'news_info'

serializers.py

from .models import NewsInfo
from rest_framework import serializers
...
class NewsInfoSerializer(serializers.ModelSerializer):
    class Meta:
        fields = ['news_category', 'news_link', 'news']
        model = NewsInfo

class NewsCategorySerializer(serializers.ModelSerializer):
    class Meta:
        fields = ['news_category']
        model = NewsInfo

views.py

from rest_framework import viewsets
from .models import NewsInfo
from .serializers import NewsCategorySerializer
...
class CategoryViewSet(viewsets.ModelViewSet):
    queryset = NewsInfo.objects.values('news_category').distinct()
    serializer_class = NewsCategorySerializer

我在这里得到响应,但是像这样的键值对:

{
    "count": 22,
    "next": null,
    "previous": null,
    "results": [{
        "news_category": "apple"
    }, {
        "news_category": "google"
    }, {
        "news_category": "microsoft"
    }, {
        "news_category": "apps"
    }, {
        "news_category": "photography"
    }, {
        "news_category": "virtual-reality"
    }, {
        "news_category": "business"
    }]
}

无论我如何尝试,都无法获得想要的结果。 请帮忙。

NewsCategorySerializer序列化器的to_representation()方法重写为

class NewsCategorySerializer(serializers.ModelSerializer):
    class Meta:
        fields = ['news_category']
        model = NewsInfo

    def to_representation(self, instance): return super().to_representation(instance)['news_category']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM