外部字段如何显示名称而不是id?

bxgwgixi  于 2022-10-22  发布在  Python
关注(0)|答案(3)|浏览(187)

在我的模型中。py,有两种模型,AvailableArea有一个外域,请参阅AddressRegion

  1. class AddressRegion(models.Model):
  2. name = models.CharField(max_length=8)
  3. def __str__(self):
  4. return self.name
  5. def __unicode__(self):
  6. return self.name
  7. class AvailableArea(models.Model):
  8. name = models.CharField(max_length=8)
  9. addressregion = models.ForeignKey(AddressRegion, default=1, related_name='availableareas', on_delete=models.CASCADE)
  10. def __str__(self):
  11. return self.name
  12. def __unicode__(self):
  13. return self.name

在序列化程序中。py,我序列化所有字段:

  1. class AvailableAreaSerializer(ModelSerializer):
  2. """
  3. region
  4. """
  5. class Meta:
  6. model = AvailableArea
  7. fields = "__all__"

在views.py中:

  1. class AddressRegionListAPIView(ListAPIView):
  2. serializer_class = AddressRegionSerializer
  3. permission_classes = []
  4. queryset = AddressRegion.objects.all()

其余框架数据如下:

  1. [
  2. {
  3. "id": 13,
  4. "name": "st-01",
  5. "addressregion": 3
  6. },
  7. {
  8. "id": 14,
  9. "name": "tg-02",
  10. "addressregion": 4
  11. },
  12. {
  13. "id": 15,
  14. "name": "sx-01",
  15. "addressregion": 3
  16. }
  17. ]

我希望addressregion不显示addressregion的id,而是显示addressregion的m2n4o1p。

2vuwiymt

2vuwiymt1#

您可以执行以下操作:

  1. class AvailableAreaSerializer(ModelSerializer):
  2. addressregion_name= serializers.ReadOnlyField(source='addressregion.name')
  3. class Meta:
  4. model = AvailableArea
  5. fields = ('id', 'name', 'addressregion_name')
epfja78i

epfja78i2#

只需在序列化程序中添加以下代码:

  1. addressregion_name = serializers.StringRelatedField()

应该如下所示

  1. class AvailableAreaSerializer(ModelSerializer):
  2. addressregion_name = serializers.StringRelatedField()
  3. class Meta:
  4. model = AvailableArea
  5. fields = ('id', 'name', 'addressregion__name')
y1aodyip

y1aodyip3#

序列化程序应该如下所示:

  1. class AvailableAreaSerializer(ModelSerializer):
  2. """
  3. 可用地区
  4. """
  5. class Meta:
  6. model = AvailableArea
  7. fields = ('id', 'name', 'addressregion__name')

视图中的queryset应为:

  1. queryset = AddressRegion.objects.all().select_related('addressregion')

select_related将通过连接这两个表来获取结果。欲了解更多信息,请阅读此

相关问题