Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django rest框架:为什么我的API为我的枚举返回键而不是值?_Python_Rest_Django Rest Framework_Django Rest Framework 3.6.3 - Fatal编程技术网

Python django rest框架:为什么我的API为我的枚举返回键而不是值?

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

我在我的第一个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()),
这是我的序列化程序。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()方法以正确处理此问题。