小编ama*_*oup的帖子

如何获取主键相关字段嵌套序列化程序 django rest 框架的所有值

我有以下型号:

class SearchCity(models.Model):
    city = models.CharField(max_length=200)

class SearchNeighborhood(models.Model):
    city = models.ForeignKey(SearchCity, on_delete=models.CASCADE)
    neighborhood = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

然后是以下嵌套序列化程序:

class CityNeighborhoodReadOnlySerializer(serializers.ModelSerializer):
    searchneighborhood_set = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = SearchCity
        fields = ('city','searchneighborhood_set')
        read_only_fields =('city', 'searchneighborhood_set')
Run Code Online (Sandbox Code Playgroud)

与视图配对:

class CityNeighborhoodView(ListAPIView):
    queryset = SearchCity.objects.all()
    serializer_class = CityNeighborhoodReadOnlySerializer
Run Code Online (Sandbox Code Playgroud)

当我进行 api 调用时,我得到了这个:

city: "Chicago"
    searchneighborhood_set: 
      0: 5 
      1: 4
      2: 3
city: "New York"
    searchneighborhood_set:
      0: 8
      1: 7
      2: 6
Run Code Online (Sandbox Code Playgroud)

我只是获取相关对象的主键。哪个好,我需要那个,但我也想要这个neighborhood名字,我怎么得到这个名字?

编辑:

这个问题可能会带来一些启发。他们没有使用与主键相关的序列化器,所以我的问题是(如果这当然有效,那么与主键相关的序列化器的意义是什么?

Django Rest Framework嵌套序列化器未显示相关数据

django serialization json nested django-rest-framework

4
推荐指数
1
解决办法
3685
查看次数

在看似有效的 Django Rest Framework Post 请求上获取错误请求,要求在序列化程序数据中使用 FK

我正在创建一个新SearchNeighborhood对象并将其连接到请求中已经创建的SearchCity对象POST

我有以下型号

class SearchCity(models.Model):
    city = models.CharField(max_length=200)

class SearchNeighborhood(models.Model):
    city = models.ForeignKey(SearchCity, on_delete=models.CASCADE)
    neighborhood = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

我的相关序列化程序是:

class SearchNeighborhoodSerializer(serializers.ModelSerializer):
    class Meta:
        model = SearchNeighborhood
        fields = ('pk', 'neighborhood')
Run Code Online (Sandbox Code Playgroud)

我的观点和相关方法是:

class CityNeighborhoodsListCreate(APIView):
 def post(self, request, *args, **kwargs):
        citypk = kwargs.get('citypk', None)
        city=get_object_or_404(SearchCity,pk=citypk)
        serialized = SearchNeighborhoodSerializer(data=request.data)
        if serialized.is_valid(raise_exception=True):
            validatedData = serialized.validated_data
            neighborhood = validatedData.get('neighborhood')
            neighborhoodobject = SearchNeighborhood(neighborhood= neighborhood, city = city)
            neighborhoodobject.save()
            createdneighborhood = SearchNeighborhoodSerializer(neighborhoodobject)
            return Response({
                'neighborhood': createdneighborhood.data
            })
Run Code Online (Sandbox Code Playgroud)

我正在使用 Angular 4

我的AJAX要求是: …

post bad-request deserialization django-rest-framework angular

3
推荐指数
1
解决办法
4391
查看次数

序列化程序 django rest 框架上字段值的属性错误

我收到以下错误:

AttributeError: Got AttributeError when attempting to get a value for field `city` on serializer `SearchCitySerializer`
Run Code Online (Sandbox Code Playgroud)

我的序列化程序是正确的,除非我明显遗漏了一些东西。

这是我的模型:

class SearchCity(models.Model):
    city = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

这是我的序列化程序

class SearchCitySerializer(serializers.ModelSerializer):
    class Meta:
        model = SearchCity
        fields = ('pk','city')
Run Code Online (Sandbox Code Playgroud)

*** 我在没有 pk 的情况下尝试了序列化程序,但仍然失败

在这里它在视图中使用:

 from serializers import SearchCitySerializer

 def get(self, request, format=None):
        searchcityqueryset = SearchCity.objects.all()
        serializedsearchcity = SearchCitySerializer(searchcityqueryset)

        return Response({
            'searchcity': serializedsearchcity.data,
        })
Run Code Online (Sandbox Code Playgroud)

我得到的完整错误:

File "/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/backend/virtualsuits/suitsandtables/suitsandtablessettingsapp/views.py", line 37, in get
    'searchcity': serializedsearchcity.data,
  File "/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/backend/virtualsuits/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 537, in data
    ret = super(Serializer, self).data
  File "/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/backend/virtualsuits/local/lib/python2.7/site-packages/rest_framework/serializers.py", line …
Run Code Online (Sandbox Code Playgroud)

django serialization model attributeerror django-rest-framework

1
推荐指数
1
解决办法
2047
查看次数