首页 > 解决方案 > HyperlinkedRelatedField DRF 不适用于 ViewSet

问题描述

我有这些模型:

class ExamSheet (models.Model):
    pass

class Exam(models.Model):
    exam_sheet = models.ForeignKey('myapp.ExamSheet',
                               related_name='exams',
                               )

序列化器:

class ExamBaseSerializer(serializers.ModelSerializer):
    exam_sheet = serializers.HyperlinkedRelatedField(queryset=ExamSheet.objects.all(), view_name='examsheet-detail')

    class Meta:
        model = Exam
        fields = ('id', 'user', 'exam_sheet', )
        read_only_fields = ('id', 'user',)

视图集:

class ExamViewSet(MultiSerializerViewSet):
    queryset = Exam.objects.all()

class ExamSheetViewSet(MultiSerializerViewSet):
    queryset = ExamSheet.objects.all()

路线:

app_name = 'exams_api'
router = DefaultRouter()
router.register(r'exams', views.ExamViewSet)
router.register(r'exams_sheets', views.ExamSheetViewSet)
urlpatterns = []
urlpatterns += router.urls

全球应用网址:

urlpatterns = [
    path('api/', include('exams_api.urls')),
]

通用视图集:

class MultiSerializerViewSet(viewsets.ModelViewSet):
    serializers = {
        'default': None,
    }

    def get_serializer_class(self):
        return self.serializers.get(self.action, self.serializers['default'])

但这会给我一个错误:

/api/exams/ 配置不当

无法使用视图名称“examsheet-detail”解析超链接关系的 URL。您可能未能在 API 中包含相关模型,或者lookup_field该字段的属性配置错误。

如何HyperlinkedRelatedField在我的序列化程序中显示指向相关模型的链接?

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读