HyperlinkedRelatedField DRF不适用于ViewSet

时间:2019-04-06 11:47:25

标签: python django django-rest-framework

我有以下模型:

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

ViewSet:

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

GenericViewSet:

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

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

但这会引发一个错误:

  

在/ api / exams /

中配置不正确      

无法使用视图名称解析超链接关系的URL   “详细检查表”。您可能未包含相关模型   在您的API中,或在lookup_field属性上配置错误   此字段。

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

0 个答案:

没有答案