Автоматический подсчет элементов в модели ManyToMany Django
Я ищу способ подсчета количества "зарезервированных" объектов внутри созданного мной класса "IPSubnetAllocation" (если это вообще возможно?).
Эффективно то, что я делаю, это выделение меньших IP-подсетей внутри большего блока "IPBlockAllocation", например:
Родительский префикс:
- 192.168.0.0/24
Детский префикс:
- 192.168.0.0/31
- 192.168.0.2/31
- Разрешено...
- 192.168.254/31
Я могу назначить дочерний префикс интерфейсу (любому сетевому устройству) и установить его зарезервированный статус в True. Это означает, что он больше не доступен для резервирования (эта логика выходит за рамки). Однако я хотел бы автоматически увеличивать / уменьшать счетчик "subnets_reserved" в "IPBlockAllocation".
class IPSubnetAllocation(models.Model):
parent_prefix = models.ForeignKey(
'IPBlockAllocation', null=True, on_delete=models.CASCADE
)
subnet = models.CharField(
blank=True, null=True, unique=True, max_length=15)
assigned_interface = models.ForeignKey(
DeviceInterfaces, null=True, on_delete=models.CASCADE)
reserved = models.BooleanField(default=False)
role = models.CharField(choices=IP_BLOCK_ROLE,
default='Select', max_length=10)
class IPBlockAllocation(models.Model):
name = models.CharField(unique=True, max_length=255)
prefix = models.GenericIPAddressField(
blank=True, null=True, unique=True, validators=[validate_ipv4_address])
mask = models.IntegerField(choices=SUBNET_MASK, default='Select')
subnets = models.ManyToManyField(IPSubnetAllocation, blank=True)
subnets_count = models.IntegerField(blank=True, null=True)
subnets_reserved = models.IntegerField(default=0, blank=True, null=True)
role = models.CharField(choices=IP_BLOCK_ROLE,
default='Select', max_length=10)