2 回答

TA貢獻1799條經驗 獲得超8個贊
如果您想從單個對象中獲取掩碼長度,您可以定義您的模型,例如:
from ipaddress import ip_interface
from django.db import models
from netfields import InetAddressField, CidrAddressField, NetManager
class TestModel(models.Model):
client_ip = InetAddressField(default=ip_interface('0.0.0.0/0'), store_prefix_length=True)
@property
def masklength(self):
return self.client_ip.network.prefixlen
例子:
obj = TestModel(client_ip=ip_interface('192.168.1.0/24'))
obj.masklength # 24
請注意,它ipaddress是在 Python 3.3+ 中內置的,因此如果您使用的是舊版本,則必須安裝它

TA貢獻1862條經驗 獲得超7個贊
您可以創建自己的Func將此功能添加到您的項目中:
from django.db.models import IntegerField, Func
class MaskLen(Func):
function = 'MASKLEN'
def __init__(self, output_field=None, **extra):
if output_field is None:
output_field = IntegerField()
super(TransactionNow, self).__init__(output_field=output_field, **extra)
然后按如下方式使用它:qs.annotate(mask_length=MaskLen('client_ip'))
添加回答
舉報