代码之家  ›  专栏  ›  技术社区  ›  brandonsimpkins

Django Rest Framework序列化程序不显示所有字段

  •  0
  • brandonsimpkins  · 技术社区  · 6 年前

    当DRF没有为模型类/引用表(特别是主键)正确显示所有字段时,我遇到了一个问题。

    我的模型类如下(非常简单):

    class UnitOfIssue(models.Model):
        code = models.CharField(max_length=2, primary_key=True)
        description = models.CharField(max_length=16)
    
        class Meta:
            ordering = ('code',)                                                                                                                                                   
    
        def __str__(self):
            return "{0} - {1}".format(self.code, self.description)
    

    我的序列化程序如下所示:

    class UnitOfIssueSerializer(serializers.HyperlinkedModelSerializer):
        """ 
        """
        url = serializers.HyperlinkedIdentityField(
                read_only=True,
                view_name='unitofissue-detail',
                format='html',
                lookup_field='code')
    
        class Meta:
            model = UnitOfIssue
            fields = ('code', 'description', 'url')
            # fields = '__all__'                                     
    

    我使用的是一个通用视图:

    class UnitOfIssueDetail(generics.RetrieveUpdateDestroyAPIView):
        queryset = UnitOfIssue.objects.all()
        serializer_class = UnitOfIssueSerializer
        permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
        lookup_field = 'code'
    

    为了 UnitOfIssue 主键 code 要在自动生成的UI中显示,我必须定义 fields = ('code', 'description', 'url') 在序列化程序中而不是 fields = '__all__' .

    我只想能够使用 '__all__' 语法,但我不知道出了什么问题。

    另外,我使用Django==1.11.13和djangorestframework==3.8.2

    1 回复  |  直到 6 年前
        1
  •  1
  •   brandonsimpkins    6 年前

    这个问题困扰了我好几个星期,但它是一个如此简单的错误。我通过将序列化程序基类更改为:

    class UnitOfIssueSerializer(serializers.HyperlinkedModelSerializer):
    

    致:

    class UnitOfIssueSerializer(serializers.ModelSerializer):