filterset_fields 的 drf-壮观问题

drf-spectacular issue with filterset_fields

我正在尝试将 drf-spectacular 实施到现有的 Django REST API。

然而,当我尝试 运行

时出现以下错误
./manage.py spectacular --file schema.yml

错误:

python3.7/site-packages/django_filters/filterset.py", line 352, in get_filters
    "%s" % ', '.join(undefined)
TypeError: 'Meta.fields' contains fields that are not defined on this FilterSet: client, tenant_id, subtenant_id, data_stream_id

过滤器确实有效,但似乎不能很好地与 drf-spectacular 库配合使用。谁能告诉我如何解决这个问题?

规格如下:

Python                3.7.2
Django                3.0.2    
django-filter         2.2.0    
django-rest-framework 0.1.0    
djangorestframework   3.12.1   
drf-spectacular       0.12.0 

视图集示例:

class subModelViewSet(viewsets.ModelViewSet):
    """Standard ViewSet for the DataStream Model."""
    queryset = DataStream.objects.all()
    serializer_class = DataStreamSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ('client', 'tenant_id', 'subtenant_id', 'data_stream_id',)

序列化器示例:

class DataStreamSerializer(serializers.ModelSerializer):
    """Class to validate an uploaded DataStream."""

    class Meta:
        """Nested Meta Class."""

        model = DataStream
        fields = '__all__'

原来是一个视图集试图将 filterset_fields 应用到 subModel 上,该 subModel 不直接包含这些字段,而是被另一个父模型上的 ForeignKey 引用。虽然我认为这些过滤器按预期工作,但我认为在这种情况下,对这些字段的实际过滤是由中间件执行的。

从视图集中删除字段可以毫无问题地生成架构。我能够访问完全呈现的 /docs 页面和 /schema 端点工作。到目前为止,drf-spectacular 给我留下了深刻的印象。

示例模型:

class DataSteam(models.Model):
    """Class for DataSteam Model."""
    client = models.CharField(max_length=200)
    tenant_id = models.CharField(max_length=200)
    subtenant_id = models.CharField(max_length=200)
    data_stream_id = models.CharField(max_length=200)

class subModel(models.Parent):
    """Class for storing linked datastream records."""
    ds = models.ForeignKey(DataStream, on_delete=models.CASCADE)