I am writing a web service using Django and is trying to create an API that returns all distinct categories in a table which I have in MySQL database. The table schema is provided below:
+---------------+--------------+------+-----+---------+----------------+
| 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 | |
+---------------+--------------+------+-----+---------+----------------+
The news_category field here is not unique. I want the API to list all distinct categories in the following JSON format:
{
"count": 22,
"next": null,
"previous": null,
"results": ["apple", "google", "microsoft", "apps", "photography", "virtual-reality", "business"]
}
Following is my 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
I am getting the response here, but as key value pairs like this:
{
"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"
}]
}
Whatever I try, I am not able to make the result as I want it. Please help.