Guest User

Untitled

a guest
Feb 24th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1. from django.db import models
  2. from django.db.models.signals import pre_save, post_delete
  3. from django.dispatch import receiver
  4.  
  5. from django.core.exceptions import ValidationError
  6.  
  7. COLLECTIVE_NUMBER = ['84959830402', '84959830535']
  8.  
  9.  
  10. class Customer(models.Model):
  11. STATUS = (
  12. ('1', 'Активный'),
  13. ('0', 'Отключен'),
  14. )
  15.  
  16. name = models.CharField(max_length=255, unique=True)
  17. status = models.CharField(max_length=10,
  18. choices=STATUS,
  19. default='0')
  20. address = models.CharField(max_length=255)
  21. description = models.CharField(max_length=255, blank=True)
  22. date_last_change = models.DateField(auto_now=True)
  23.  
  24. def __str__(self):
  25. return self.name
  26.  
  27.  
  28. class Device(models.Model):
  29. name = models.CharField(max_length=255)
  30. login = models.CharField(max_length=255)
  31. password = models.CharField('Пароль устройства', max_length=255)
  32. wan = models.GenericIPAddressField(protocol='IPv4', unique=True)
  33. lan = models.GenericIPAddressField(protocol='IPv4', blank=True, null=True)
  34.  
  35. def __str__(self):
  36. return "{} ({})".format(self.name, self.wan)
  37.  
  38.  
  39. class Number(models.Model):
  40. TYPE_OF_INTNUM = (
  41. ('SKD', 'СКД'),
  42. ('MTT', 'МТТ'),
  43. ('MOA', 'МОА'),
  44. )
  45. TYPE_OF_EXT = (
  46. ('any', 'общий'),
  47. ('specific', 'выделенный'),
  48. ('free', 'свободный')
  49. )
  50. internal_type = models.CharField(max_length=20,
  51. choices=TYPE_OF_INTNUM,
  52. default='MTT')
  53. internal_number = models.CharField(max_length=6, unique=True)
  54. internal_password = models.CharField(max_length=20, blank=True, null=True)
  55. customer = models.ForeignKey(Customer,
  56. on_delete=models.CASCADE,
  57. blank=True,
  58. null=True)
  59. device = models.ForeignKey(Device,
  60. on_delete=models.CASCADE,
  61. blank=True,
  62. null=True)
  63. AON = models.CharField(max_length=11, blank=True, null=True)
  64. type_of_access = models.CharField(max_length=10,
  65. choices=TYPE_OF_EXT, default='free')
  66.  
  67. def __str__(self):
  68. return '"{}" <=> "{}"'.format(self.internal_number, self.AON)
  69.  
  70.  
  71. @receiver(pre_save, sender=Number)
  72. def my_handler(sender, instance, **kwargs):
  73. instance.type_of_access = 'specific'
  74. if instance.AON == '':
  75. instance.type_of_access = 'free'
  76. return
  77. if instance.AON in COLLECTIVE_NUMBER:
  78. instance.type_of_access = 'any'
  79. return
  80.  
  81.  
  82. @receiver(post_delete, sender=Number)
  83. def remove_client_with_no_numbers(sender, instance, **kwargs):
  84. customer = instance.customer
  85. if not Number.objects.filter(customer=customer):
  86. print('удаление клиента')
  87. customer.delete()
Add Comment
Please, Sign In to add comment