我正在使用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"
}]
}
无论我尝试什么,我都无法获得想要的结果。请帮忙。
答案 0 :(得分:3)
以
to_representation()
序列化器的 NewsCategorySerializer
方法
class NewsCategorySerializer(serializers.ModelSerializer):
class Meta:
fields = ['news_category']
model = NewsInfo
def to_representation(self, instance):
return super().to_representation(instance)['news_category']