Return 作为 JSON 字符串数组而不是键值数组
Return as JSON string array instead of Key-Value array
我正在使用 Django 编写 Web 服务,并试图创建一个 API returns 我在 MySQL 数据库中的 table 中的所有不同类别. table 架构如下:
+---------------+--------------+------+-----+---------+----------------+
| 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"
}]
}
无论我怎么尝试,都无法得到我想要的结果。请帮忙。
重写 to_representation()
序列化程序的 NewsCategorySerializer
方法,
class NewsCategorySerializer(serializers.ModelSerializer):
class Meta:
fields = ['news_category']
model = NewsInfo
<b>def to_representation(self, instance):
return super().to_representation(instance)['news_category']</b>
我正在使用 Django 编写 Web 服务,并试图创建一个 API returns 我在 MySQL 数据库中的 table 中的所有不同类别. table 架构如下:
+---------------+--------------+------+-----+---------+----------------+
| 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"
}]
}
无论我怎么尝试,都无法得到我想要的结果。请帮忙。
重写 to_representation()
序列化程序的 NewsCategorySerializer
方法,
class NewsCategorySerializer(serializers.ModelSerializer):
class Meta:
fields = ['news_category']
model = NewsInfo
<b>def to_representation(self, instance):
return super().to_representation(instance)['news_category']</b>