kun*_*mbi 2 python django django-rest-framework
我不能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",
)
Run Code Online (Sandbox Code Playgroud)
查询时收到的 JSON 输出curl -X GET http://localhost/api/promotion/2/:
{"id":2,"name":"My promotion"}
Run Code Online (Sandbox Code Playgroud)
如果我使用reverse检查,如果view_name在HyperlinkedRelatedField存在,它打印正确的URL。
我的问题是:为什么没有url出现在响应中?它适用于我的所有其他视图(将代码与有效的类进行比较并没有帮助)。阅读 DRF 文档,但我没有看到任何新内容(使用版本 3.11.0)
要获取当前对象的 url 表示,您应该使用HyperlinkedIdentityField
class PromotionSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name="campaigns:promotion-detail", read_only=True
)
class Meta:
model = Promotion
fields = (
"url",
"id",
"name",
)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |