我在第一次 API 开发中陷入了困境。我希望有人能告诉我我做错了什么。
这是我的models.py:
from django.db import models
# Create your models here.
COUNTRY_LIST = [('PL', 'Poland'), ('DK', 'Denmark'), ('FI', 'Finland')]
class Trip(models.Model):
startDate = models.DateField()
endDate = models.DateField()
country = models.ChoiceField(choices=COUNTRY_LIST, max_length=2)
这是我的serializers.py:
from rest_framework import serializers
from trips.models import Trip, COUNTRY_LIST, CLIENTS_LIST, TRANSPORTS_LIST, STATUS_LIST
# Trip Serializer
class TripSerializer(serializers.ModelSerializer):
class Meta:
model = Trip
fields = '__all__'
这是我的api_views.py:
from rest_framework.exceptions import ValidationError
from rest_framework.generics import ListAPIView, CreateAPIView, RetrieveUpdateDestroyAPIView
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter
from trips.serializers import TripSerializer
from trips.models import Trip
import re
class TripList(ListAPIView):
queryset = Trip.objects.all()
serializer_class = TripSerializer
filter_backends = (DjangoFilterBackend, SearchFilter)
filter_fields = ('id', 'tripStatus', 'employeeId')
search_fields = ('place', 'remarks')
这是我的urls.py:
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include
import trips.views
import trips.api_views
urlpatterns = [
path('trip', trips.api_views.TripList.as_view()),
问题描述: 目前,按照上面的设计,我的 API 使用数据进行响应,其中返回我的枚举的密钥,如下所示:
{
"id": 6,
"startDate": "2019-11-04",
"endDate": "2019-11-05",
"country": "PL"
},
我想我需要在serializers.py中实现一些更改以使其做出这样的响应:
{
"id": 6,
"startDate": "2019-11-04",
"endDate": "2019-11-05",
"country": "Poland"
},
有人可以在这里给我一些建议吗?
从 django-rest-framework-3.6.3 开始,您可以指定
source=...
参数并指定它应该使用该值的显示:
class TripSerializer(serializers.ModelSerializer):
country = serializers.CharField(source='get_country_display')
class Meta:
model = Trip
fields = '__all__'
所以这里我们不使用
country
值本身,而是使用 get_country_display
。