Не корректно работает запрос Django ORM
У меня есть модели:
class Emp(AbstractUser):
username = None
emp_mail = models.EmailField(
_('email address'),
unique=True,
)
USERNAME_FIELD = 'emp_mail'
REQUIRED_FIELDS = []
EMAIL_FIELD = 'emp_mail'
per_no = models.PositiveIntegerField('Pers.No.', blank=True, null=True)
chief_mail = models.EmailField('Почта руководителя', max_length=100, blank=True, null=True)
roles_name = models.ManyToManyField('Rolesl', blank=True, verbose_name='Роли')
current_pos = models.ForeignKey('Position', blank=True, null=True, on_delete=models.SET_NULL,
verbose_name='Позиция')
department = models.ForeignKey('Departments', blank=True, null=True, on_delete=models.SET_NULL,
verbose_name='Отдел')
cur_id = models.ManyToManyField('Curicls', max_length=200, verbose_name='Дополнительные курсы', blank=True)
training_curs = models.ManyToManyField('Curicls', max_length=200, verbose_name='Тренер каких курсов', blank=True,
related_name='training_curs')
objects = CustomUserManager()
class Meta:
verbose_name = 'Пользователь'
verbose_name_plural = 'Пользователи'
def __str__(self):
return self.emp_mail
class Docs(models.Model):
ehs = 'E'
qms = 'Q'
STAT = [
(ehs, 'EHS'),
(qms, 'QMS'),
]
doc_id = models.CharField('ID документа', max_length=200, null=True, unique=True)
doc_title = models.CharField('Название документа', max_length=200, null=True)
hyp_name = models.TextField('Ссылка на документ', null=True, blank=True)
update_date = models.DateField(default=timezone.now(), verbose_name='Дата обновления документа')
version = models.PositiveIntegerField('Версия документа', default=1)
department = models.CharField(max_length=1, choices=STAT, default='Q', verbose_name='Модуль обучения')
active = models.BooleanField('Активный статус', default=True,
help_text='Да если документ является актуальным, Нет - если больше не актуален')
def __str__(self):
return self.doc_id
class Meta:
verbose_name = 'Документ'
verbose_name_plural = 'Документы'
class Curicls(models.Model):
ehs = 'E'
qms = 'Q'
STAT = [
(ehs, 'EHS'),
(qms, 'QMS'),
]
department = models.CharField(max_length=1, choices=STAT, default='Q', verbose_name='Модуль обучения')
curic_id = models.CharField('ID курса', max_length=200, null=True, blank=True, unique=True)
cur_title = models.CharField('Название курса', max_length=200, unique=True)
doc_id = models.ManyToManyField(Docs, blank=True, through=CurDocs)
training = models.ManyToManyField(Trainings, blank=True, verbose_name='Тренинги')
quiz = models.ManyToManyField(Quiz, verbose_name='Тесты', blank=True)
opening_order = models.BooleanField(default=True, verbose_name='Открытие модулей по порядку',help_text='Если стоит, то модули открыаются по порядку.')
cur_picture = models.ImageField('Картинка', blank=True, upload_to='curicls/')
class Rolesl(models.Model):
role_name = models.CharField('Название роли', max_length=100, unique=True)
cur_id = models.ManyToManyField(Curicls, max_length=200, verbose_name='ID курса', blank=True)
def __str__(self):
return self.role_name
class Meta:
verbose_name = 'Роль'
verbose_name_plural = 'Роли'
class Progress(models.Model):
mail_sent = 'M'
done = 'D'
STAT = [
(mail_sent, 'Уведомлен'),
(done, 'Прошел'),
]
emp_name = models.ForeignKey(Emp, on_delete=models.CASCADE, verbose_name='Сотрудник')
doc_title = models.ForeignKey(Docs, on_delete=models.CASCADE, verbose_name='Документ')
date_update = models.DateField(verbose_name='Дата прохождения', blank=True, null=True)
date_create = models.DateField(default=timezone.now(), verbose_name='Дата начала прохождения', help_text='Дата, которая указывает, когда документ был добавлен для прохождения сотруднику')
dead_line_date = models.DateField(verbose_name='Дедлайн', blank=True, null=True)
version = models.PositiveIntegerField('Версия документа для текущего прогресса')
approve_sertificate = models.FileField(verbose_name='Сертификат', blank=True, null=True, upload_to='certificates/', help_text='Файл с сертификатом')
active_status = models.BooleanField(default=True, verbose_name='Активный статус документа', help_text='Если да, то документ активный и его прогресс считается, если нет, то этот прогресс не считается')
add_status = models.BooleanField(default=False, verbose_name='Дополнительный статус', help_text='Если да, то документ является дополнительным для данного сотрудника, нет, то ')
status = models.CharField(max_length=1, choices=STAT, default='M')
def __str__(self):
return str(self.pk)
class Meta:
verbose_name = 'Прогресс по документам'
verbose_name_plural = 'Прогресс по документам'
В модели прогресс сохраняется прогресс пользователя согласно, назначенным ролям. Но если меняется версия документа, то запись о прогрессе становится неактивной, и при сохранении пользователя, должен в таких случаях сформироваться прогресс по таким документам.
В сигнале post save модели EMP я делаю это, но почему-то запрос ничего не выдает, хотя по данным должен.
docs_to_create = Docs.objects.filter(curicls__rolesl__emp=emploer,active=True).exclude(Q(progress__emp_name=emploer) &Q(progress__doc_title__curicls__rolesl__emp=emploer) & Q(progress__active_status=True)).distinct()