Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class VacancyQuerySet(models.QuerySet):
- def open(self):
- return self.filter(status='open')
- def closed(self):
- return self.filter(status='closed')
- class Vacancy(models.Model):
- STATUS_OPEN = 'open'
- STATUS_CLOSED = 'closed'
- STATUS_CANCELED = 'canceled'
- STATUSES = (
- (STATUS_OPEN, 'Открыта'),
- (STATUS_CLOSED, 'Закрыта'),
- (STATUS_CANCELED, 'Отменена'),
- )
- project = models.ForeignKey(Project, verbose_name='Проект', on_delete=models.CASCADE)
- position = models.CharField('Роль', max_length=100)
- text = RichTextField('Описание')
- create_dt = models.DateTimeField('Дата создания вакансии', auto_now_add=True)
- close_dt = models.DateTimeField('Дата закрытия вакансии', blank=True, null=True)
- hired = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Кто нанят', null=True, blank=True, on_delete=models.SET_NULL)
- status = models.CharField('Статус', choices=STATUSES, default=STATUS_OPEN, max_length=8)
- tags = TaggableManager('Скилы', blank=True)
- objects = VacancyQuerySet.as_manager()
- def __str__(self):
- return self.position
- class Meta:
- verbose_name = 'Вакансия'
- verbose_name_plural = 'Вакансии'
- class Project(models.Model):
- name = models.CharField('Название', max_length=100)
- description = models.CharField('Короткое описание', max_length=100)
- text = RichTextField('Описание')
- logo = models.ImageField('Лого', upload_to='project/logo')
- creator = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, verbose_name='Основатель',
- on_delete=models.SET_NULL, related_name='projects',)
- category = models.ForeignKey('common.Category', on_delete=models.CASCADE, verbose_name='Категория')
- tags = TaggableManager(related_name='project_tags', verbose_name='Стек технологий')
- create_dt = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
- update_dt: datetime = models.DateTimeField(
- # - изменяем при сохранении проекта
- # - изменяем при сохранении новости
- # - изменяем при сохранении вакансии
- blank=True,
- verbose_name='Дата обновления проекта',
- )
- def __str__(self):
- return self.name
- def get_absolute_url(self):
- return reverse('project-itm', kwargs={'pk': self.id})
- def member_leave(self, user):
- member_obj=Member.objects.filter(user=user, project=self)
- if len(member_obj)==1:
- member_obj=member_obj[0]
- member_obj.is_exclude=True
- member_obj.exclude_dt=datetime.now()
- member_obj.save()
- return True
- else:
- return False
- def update(self):
- self.update_dt = datetime.now()
- self.save()
- class Meta:
- verbose_name = 'Проект'
- verbose_name_plural = 'Проекты'
- ordering = ['-create_dt']
- def save(self, *args, **kwargs):
- self.update_dt = datetime.now()
- super(Project, self).save(*args, **kwargs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement