Python django rest框架:为什么我的API为我的枚举返回键而不是值?
我在我的第一个API开发中遇到了麻烦。我希望有人能告诉我我做错了什么 这是我的型号。py:Python django rest框架:为什么我的API为我的枚举返回键而不是值?,python,rest,django-rest-framework,django-rest-framework-3.6.3,Python,Rest,Django Rest Framework,Django Rest Framework 3.6.3,我在我的第一个API开发中遇到了麻烦。我希望有人能告诉我我做错了什么 这是我的型号。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() endDat
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)
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__'
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')
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()),
这是我的序列化程序。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)
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__'
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')
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_视图。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)
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__'
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')
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()),
这是我的URL.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)
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__'
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')
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"
},
有人能给我一些建议吗?提前感谢。因为,您可以指定源=…
参数,并指定它应该使用该值的显示:
class TripSerializer(serializers.ModelSerializer):
country = serializers.CharField(source='get_country_display')
class Meta:
model = Trip
fields = '__all__'
类TripSerializer(serializers.ModelSerializer):
country=serializers.CharField(source='get\u country\u display')
类元:
模型=行程
字段='\uuuu all\uuuu'
因此,在这里,我们不使用
country
值本身,而是使用get\u country\u display
从API读取数据时,它通常非常有效。但现在我的帖子(旅行创建)似乎停止了工作。当我发送帖子时,我的API中出现了以下错误。调用trip.objects.create()
时,/trip/new处的TypeError得到了一个TypeError
。这可能是因为序列化程序类上有一个可写字段,该字段不是Trip.objects.create()的有效参数。您可能需要将字段设置为只读,或重写TripSerializer.create()方法以正确处理此问题。