在django rest框架中使用primaryfieldserializer的示例用例是什么?

问题描述 投票:0回答:1

我有一个目标,在嵌套序列化器中的请求响应中将城市及其邻居链接在一起。社区有一个Foriegn关键城市。

为清楚起见,这里是我最初使用的模型和序列化器。

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)

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')

但是只返回了邻近的主键,城市不是完整的城市对象。

这个:

city: "Chicago"
    searchneighborhood_set: 
      0: 5 
      1: 4
      2: 3
city: "New York"
    searchneighborhood_set:
      0: 8
      1: 7
      2: 6

这不是应该是什么,而是:

city: Chicago
    searchneighborhood_set:
         0: {pk: 5, neighborhood: 'River North}
    ....

我得到了上述请求,不是通过使用primarykeyrelatedserializer,而是使用用于序列化邻居对象的序列化程序,如下所示:

class SearchNeighborhoodSerializer(serializers.ModelSerializer):
    class Meta:
        model = SearchNeighborhood
        fields = ('pk','neighborhood')

所以现在用我的邻居替换primarykeyrealatedserializer并且正确的嵌套serailzer是这样的:

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

    class Meta:
        model = SearchCity
        fields = ('city','searchneighborhood_set')
        read_only_fields =('city', 'searchneighborhood_set')

所以这引出了一个问题,主键相关串行器的实际用例是什么?

这也是我创建的一个问题,然后自我回答,经过实验,我提出了这个问题。

how to get all values of primary key related field nested serializer django rest framework

django django-rest-framework serializer
1个回答
1
投票

有些消费者只想要/需要对象的主键,实际上就没那么多了。它只是设计应用程序的另一种方式。

© www.soinside.com 2019 - 2024. All rights reserved.