[英]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.