gpt4 book ai didi

python - 如何过滤列表是否包含参数?

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:36 25 4
gpt4 key购买 nike

如何过滤列表是否包含参数?

在我的 Django-Rest-Framework 项目中,我列出了 physical_server:

  [
{
"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 View :

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

如何实现这个过滤器?因为它不是物理服务器的属性(property)。我不能使用 filter(name='xxx') 来做到这一点。


EDIT-1

我知道我可以使用 for 循环来迭代查询集的 ipv4s,但我不确定这是否方便或高效。

最佳答案

要按相关模型的字段过滤服务器,请使用 __ (docs)符号:

ip_address = query_params.pop('ip_address')
qs = PhysicalServer.objects.filter(ipv4s__ip=ip_address)

要使服务器的 ipv4s 列表仅包含过滤后的 ip,请使用 prefetch_related :

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))

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

关于python - 如何过滤列表是否包含参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50500502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com