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)
我正在尝试将 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)