Advertisement
Guest User

Untitled

a guest
May 26th, 2021
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.35 KB | None | 0 0
  1. class VacancyQuerySet(models.QuerySet):
  2.     def open(self):
  3.         return self.filter(status='open')
  4.  
  5.     def closed(self):
  6.         return self.filter(status='closed')
  7.  
  8. class Vacancy(models.Model):
  9.     STATUS_OPEN = 'open'
  10.     STATUS_CLOSED = 'closed'
  11.     STATUS_CANCELED = 'canceled'
  12.     STATUSES = (
  13.         (STATUS_OPEN, 'Открыта'),
  14.         (STATUS_CLOSED, 'Закрыта'),
  15.         (STATUS_CANCELED, 'Отменена'),
  16.     )
  17.     project = models.ForeignKey(Project, verbose_name='Проект', on_delete=models.CASCADE)
  18.     position = models.CharField('Роль', max_length=100)
  19.  
  20.     text = RichTextField('Описание')
  21.  
  22.     create_dt = models.DateTimeField('Дата создания вакансии', auto_now_add=True)
  23.     close_dt = models.DateTimeField('Дата закрытия вакансии', blank=True, null=True)
  24.     hired = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Кто нанят', null=True, blank=True, on_delete=models.SET_NULL)
  25.     status = models.CharField('Статус', choices=STATUSES, default=STATUS_OPEN, max_length=8)
  26.     tags = TaggableManager('Скилы', blank=True)
  27.  
  28.     objects = VacancyQuerySet.as_manager()
  29.  
  30.     def __str__(self):
  31.         return self.position
  32.  
  33.     class Meta:
  34.         verbose_name = 'Вакансия'
  35.         verbose_name_plural = 'Вакансии'
  36.  
  37.  
  38. class Project(models.Model):
  39.     name = models.CharField('Название', max_length=100)
  40.     description = models.CharField('Короткое описание', max_length=100)
  41.     text = RichTextField('Описание')
  42.     logo = models.ImageField('Лого', upload_to='project/logo')
  43.     creator = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, verbose_name='Основатель',
  44.                                 on_delete=models.SET_NULL, related_name='projects',)
  45.     category = models.ForeignKey('common.Category', on_delete=models.CASCADE, verbose_name='Категория')
  46.     tags = TaggableManager(related_name='project_tags', verbose_name='Стек технологий')
  47.     create_dt = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
  48.     update_dt: datetime = models.DateTimeField(
  49.         # - изменяем при сохранении проекта
  50.         # - изменяем при сохранении новости
  51.         # - изменяем при сохранении вакансии
  52.         blank=True,
  53.         verbose_name='Дата обновления проекта',
  54.     )
  55.  
  56.     def __str__(self):
  57.         return self.name
  58.  
  59.     def get_absolute_url(self):
  60.         return reverse('project-itm', kwargs={'pk': self.id})
  61.  
  62.     def member_leave(self, user):
  63.         member_obj=Member.objects.filter(user=user, project=self)
  64.         if len(member_obj)==1:
  65.             member_obj=member_obj[0]
  66.             member_obj.is_exclude=True
  67.             member_obj.exclude_dt=datetime.now()
  68.             member_obj.save()
  69.             return True
  70.         else:
  71.             return False
  72.  
  73.     def update(self):
  74.         self.update_dt = datetime.now()
  75.         self.save()
  76.  
  77.     class Meta:
  78.         verbose_name = 'Проект'
  79.         verbose_name_plural = 'Проекты'
  80.         ordering = ['-create_dt']
  81.  
  82.     def save(self, *args, **kwargs):
  83.         self.update_dt = datetime.now()
  84.         super(Project, self).save(*args, **kwargs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement