【发布时间】:2021-03-29 10:25:06
【问题描述】:
我正在寻找一种能够使用通配符在 DRF 中过滤我的数据集的方法。 例如;我想返回以下模型中以“gb”开头的任何主机名。我也有一些要求,根据用例在主机名的中间和结尾进行搜索。
我希望能够访问以下端点:/devices/?host_name=gb*
它返回所有主机名以 gb 开头的东西。
型号:
class Device(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
host_name = models.CharField(max_length=64)
mgmt_ip_address = models.GenericIPAddressField()
domain_name = models.CharField(max_length=64)
class Meta:
ordering = ['host_name']
def __str__(self):
return self.host_name
序列化器:
class DeviceSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = Device
fields = '__all__'
查看:
class DeviceViewSet(viewsets.ModelViewSet):
permission_classes = (DjangoModelPermissions,)
queryset = Device.objects.all()
serializer_class = DeviceSerializer
filter_backends = [DjangoFilterBackend, filters.rest_framework.DjangoFilterBackend, drf_filters.SearchFilter]
filter_fields = ['id',
'host_name',
'mgmt_ip_address',
]
我尝试过创建自定义过滤器,但不确定这是正确的方法,因为我无法让它发挥作用。
【问题讨论】:
标签: python django api rest django-rest-framework