Python 如何查询使用两个整型字段(IP、掩码)定义IP范围的Django模型

Python 如何查询使用两个整型字段(IP、掩码)定义IP范围的Django模型,python,django,django-models,Python,Django,Django Models,我有: 给定某个IP,如何使用Django模型获得与该特定IP匹配的所有范围 如果我使用原始SQL,我会使用数据库的逐位运算符,但Django ORM不支持这些运算符。Django 1.0中的QuerySet API现在包括Django文档中描述的“额外”方法。额外的方法允许您将自定义WHERE子句传递到查询集,这将允许您使用所需的逐位比较。要更快地进行适合范围的查询,您最好将范围的下限IP和上限IP存储为整数。然后,所需对象的选择应该像Range.objects.filter(ip\u low

我有:

给定某个IP,如何使用Django模型获得与该特定IP匹配的所有范围


如果我使用原始SQL,我会使用数据库的逐位运算符,但Django ORM不支持这些运算符。

Django 1.0中的QuerySet API现在包括Django文档中描述的“额外”方法。额外的方法允许您将自定义WHERE子句传递到查询集,这将允许您使用所需的逐位比较。

要更快地进行适合范围的查询,您最好将范围的下限IP和上限IP存储为整数。然后,所需对象的选择应该像
Range.objects.filter(ip\u low\uuuuu le=ip,ip\u up\uuuu ge=ip)一样简单。

我建议使用python的iptools:

class Range(models.Model):
    ip = models.IntegerField() # as produced by socket.inet_aton + struct.unpack
    mask = models.IntegerField()