Python 如何筛选列表是否包含参数?

Python 如何筛选列表是否包含参数?,python,django,django-queryset,Python,Django,Django Queryset,如何筛选列表是否包含参数 在Django Rest Framework项目中,我列出了物理_服务器: [ { "id": 23, "name": 'A1' "ipv4s": [ { "id": 313, "ip": "43.243.33.33", "netmask": "255.255.255.248",

如何筛选列表是否包含参数

在Django Rest Framework项目中,我列出了物理_服务器:

  [
    {
        "id": 23,
        "name": 'A1'
        "ipv4s": [
            {
                "id": 313,
                "ip": "43.243.33.33",
                "netmask": "255.255.255.248",
                "prefix": 29,
                "is_gateway": false,
                "is_network_ip": false,
                "is_broadcast_ip": false,
                "desc": null,
                "ctime": "2018-04-26T21:17:34.868492+08:00",
                "uptime": "2018-05-21T12:09:25.674283+08:00",
       ....
这是我的列表API视图:

class PhysicalServerListAPIView(ListAPIView):
    serializer_class = PhysicalServerListSerializer
    permission_classes = [AllowAny]
    pagination_class = CommonPagination

    def get_queryset(self):
        query_params = self.request.query_params

        ip_address = ''
        try:
            ip_address = query_params.pop('ip_address')  # this maybe `43.243.33.33`
        except Exception as e:
            pass

        qs = PhysicalServer.objects.filter(xxxx)  # there I want the ip_address filtered if it in the `ipv4s`.

        return qs
如何实现此过滤器?因为它不是physicalserver的属性。我不能使用
过滤器(name='xxx')
来完成此操作


编辑-1


我知道我可以使用for循环来迭代queryset的IPV4,但我不确定这是否方便或有效。

这样的过滤器怎么样:

def get_queryset(self):
    query_params = self.request.query_params
    ip_address = ''
    try:
        ip_address = query_params.pop('ip_address')  
    except Exception as e:
        pass
    qs = PhysicalServer.objects.all()  
    if ip_address:
        qs = [p for p in qs if ip_address in [d['ip'] for d in p['ipv4s']]]
    return qs

要按相关型号的字段筛选服务器,请使用
\uuu
符号:

ip_address = query_params.pop('ip_address')
qs = PhysicalServer.objects.filter(ipv4s__ip=ip_address)
要使服务器的
ipv4
列表仅包含已过滤的ip,请使用:

现在,服务器的
ipv4
将只显示过滤后的ip地址

from django.db.models import Prefetch
qs = PhysicalServer.objects.filter(ipv4s__ip=ip_address).prefetch_related(Prefetch('ipv4s', queryset=IPV4S.objects.filter(ip=ip_address))