gpt4 book ai didi

python - 为什么 `url` 没有出现在 DRF 响应中

转载 作者:行者123 更新时间:2023-12-01 22:40:45 25 4
gpt4 key购买 nike

我无法获取url当我在 HyperlinkedModelSerializer 中使用它时返回.

# models.py
class Promotion(TimeStampedMixin, models.Model):
name = models.CharField(max_length=300)
# ...


# views.py
class PromotionViewSet(viewsets.ModelViewSet):
serializer_class = PromotionSerializer
queryset = Promotion.objects.all()

def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance, context={'request': request})
return Response(serializer.data)

# serializers.py
class PromotionSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedRelatedField(
view_name="campaigns:promotion-detail", read_only=True
)

class Meta:
model = Promotion
fields = (
"url",
"id",
"name",
)

查询时收到的 JSON 输出 curl -X GET http://localhost/api/promotion/2/ :

{"id":2,"name":"My promotion"}

如果我使用reverse检查 view_name 是否在 HyperlinkedRelatedField存在,它会打印正确的 URL。

我的问题是:为什么 url 没有出现在回复中?它适用于我所有其他观点(将代码与有效的类进行比较并没有帮助)。阅读 DRF 文档,但我没有看到任何新内容(使用版本 3.11.0)

最佳答案

要获取当前对象的 url 表示形式,您应该使用 HyperlinkedIdentityField

class PromotionSerializer(serializers.HyperlinkedModelSerializer):
url = <b>serializers.HyperlinkedIdentityField</b>(
view_name="campaigns:promotion-detail", read_only=True
)

class Meta:
model = Promotion
fields = (
"url",
"id",
"name",
)

关于python - 为什么 `url` 没有出现在 DRF 响应中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61417349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com