Django drf与filterset_字段的显著问题

Django drf与filterset_字段的显著问题,django,django-rest-framework,swagger,django-filter,drf-yasg,Django,Django Rest Framework,Swagger,Django Filter,Drf Yasg,我正在尝试对现有的Django REST API实现drf 但是,我在尝试运行时遇到以下错误 ./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' conta

我正在尝试对现有的Django REST API实现
drf

但是,我在尝试运行时遇到以下错误

./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库。有人能就如何解决这一问题提出建议吗

规格如下:

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_字段,该子模型不直接包含这些字段,而是由另一父模型上的ForeignKey引用。虽然我认为这些过滤器按预期工作,但我认为在本例中,这些字段的实际过滤是由中间件执行的

从视图集中删除字段可以生成没有问题的模式。我能够访问完全呈现的/docs页面和/schema端点工作。到目前为止,drf的壮观给人留下了深刻的印象

示例模型:

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) 

有趣的问题。我有数百种观点,但没有一个有这个特殊的问题。错误看起来像是来自生成的FilterSet(当您定义FilterSet_字段时),并不是特别明显。你能正常运行项目吗?如果能,你能看到/docs/page吗?嗨@AndrewBacker,事实证明问题出在声明的filter\u set字段上。特定字段名不是直接的模型之一,而是使用ForeignKey从父模型引用的。一旦我从该视图集中删除了过滤器集,它就可以完美地工作。将相应地更新问题。酷。我有很多其他问题,但没有崩溃。您是否尝试为此视图创建自定义筛选器集?它应该为您提供更大的灵活性,同时还允许您对那些外键链接字段进行筛选自
0.12.0
以来,
drf
(包括
django filter
)有了巨大的改进@Rogan88请查看更新的版本。如果还有问题,请随时打开github问题。