diff --git a/ip_pool/migrations/0002_change_unique.py b/ip_pool/migrations/0002_change_unique.py new file mode 100644 index 0000000..307ce34 --- /dev/null +++ b/ip_pool/migrations/0002_change_unique.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1 on 2018-10-05 15:17 + +from django.db import migrations +import djing.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('ip_pool', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='ipleasemodel', + name='mac_addr', + field=djing.fields.MACAddressField(blank=True, integer=True, null=True, verbose_name='Mac address'), + ), + migrations.AlterUniqueTogether( + name='ipleasemodel', + unique_together={('ip', 'network', 'mac_addr')}, + ), + ] diff --git a/ip_pool/models.py b/ip_pool/models.py index 7e87166..2186559 100644 --- a/ip_pool/models.py +++ b/ip_pool/models.py @@ -156,14 +156,14 @@ class IpLeaseManager(models.Manager): if lease_live_time is None: raise ImproperlyConfigured('You must specify LEASE_LIVE_TIME in settings') senility = now() - timedelta(seconds=lease_live_time) - return self.filter(lease_time__lt=senility, is_active=False) + return self.filter(lease_time__lt=senility) class IpLeaseModel(models.Model): ip = models.GenericIPAddressField(verbose_name=_('Ip address'), unique=True) network = models.ForeignKey(NetworkModel, on_delete=models.CASCADE, verbose_name=_('Parent network'), null=True, blank=True) - mac_addr = MACAddressField(verbose_name=_('Mac address'), null=True, blank=True, unique=True) + mac_addr = MACAddressField(verbose_name=_('Mac address'), null=True, blank=True) lease_time = models.DateTimeField(_('Lease time'), auto_now_add=True) is_dynamic = models.BooleanField(_('Is dynamic'), default=False) is_active = models.BooleanField(_('Is active'), default=True) @@ -198,7 +198,7 @@ class IpLeaseModel(models.Model): verbose_name = _('Employed ip') verbose_name_plural = _('Employed ip addresses') ordering = ('-id',) - unique_together = ('ip', 'network') + unique_together = ('ip', 'network', 'mac_addr') # class LeasesHistory(models.Model): diff --git a/periodic.py b/periodic.py index fd4f9c4..42c5ed9 100755 --- a/periodic.py +++ b/periodic.py @@ -94,7 +94,7 @@ def main(): ) print(l.comment) - signals.pre_delete.connect(abontariff_pre_delete, sender=AbonTariff) + # signals.pre_delete.connect(abontariff_pre_delete, sender=AbonTariff) # manage periodic pays ppays = PeriodicPayForId.objects.filter(next_pay__lt=now) \ @@ -103,7 +103,7 @@ def main(): pay.payment_for_service(now=now) # Remove old inactive ip leases - IpLeaseModel.objects.expired().delete() + IpLeaseModel.objects.expired().filter(is_active=False).delete() # sync subscribers on NAS threads = tuple(NasSyncThread(nas) for nas in NASModel.objects.