Django signal post save не работает в docker

Рейтинг: 0Ответов: 0Опубликовано: 18.05.2023

У меня есть модель Curicls, к которой привязан сигнал post save. На локальном компьютере этот сигнал работает штатно. Но когда я выкладываю сайт в docker на машину Ubuntu, этот сигнал не срабатывает.

dockerfile:

FROM python:3.8
COPY requirements.txt /temp/requirements.txt
COPY mysite /mysite1

WORKDIR /mysite1

EXPOSE 8000

RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get -y install msodbcsql17
RUN apt-get -y install unixodbc-dev

RUN pip install --upgrade pip
RUN pip3 install -r /temp/requirements.txt

docker-compose:

services:
  web-app-qa:
    build:
      context: .
    ports:
      - "8888:8000"
    volumes:
      - ./mysite/mysite1
    platform: linux
    restart: always
    command: >
      sh -c "python3 manage.py runserver 0.0.0.0:8000"
   

  redis:
    image: redis:7.0.5-alpine
    hostname: redis


  worker-qa:
    build:
      context: .
    platform: linux
    hostname: worker
    entrypoint: celery
    command: -A celery_app.app worker --loglevel=info
    volumes:
      - ./mysite:/mysite1
    links:
      - redis
    depends_on:
      - redis


  flower-qa:
    build:
      context: .
    platform: linux
    entrypoint: celery
    command: -A celery_app.app flower
    volumes:
      - ./mysite:/mysite1
    links:
      - redis
    depends_on:
      - redis
    ports:
  - "5555:5555"

model:

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/')
    
    def __str__(self):
        return self.cur_title
    
    class Meta:
        verbose_name = 'Куррикула'
        verbose_name_plural = 'Куррикулы'

@receiver(post_save, sender=Curicls)
def cur_update_progress(sender, instance, **kwargs):
    Progress.objects.filter(~Q(version=F('doc_title__version')) | Q(
    date_update__lt=(datetime.now() - timedelta(730)))).update(active_status=False)
    emps = Emp.objects.filter(roles_name__cur_id__cur_title=instance).distinct()
    if emps:
        for employee in emps:
            Progress.objects.filter(
            Q(doc_title__curicls__rolesl__emp=employee) & Q(emp_name=employee) & Q(add_status=True)).update(
            add_status=False)

            docs = Docs.objects.filter(Q(curicls__rolesl__emp__emp_mail=employee) &
                                   Q(curicls__cur_title=instance) &
                                   ~(Q(progress__emp_name=employee) &
                                     Q(progress__active_status=True) &
                                     Q(progress__doc_title__curicls__cur_title=instance)) &
                                   Q(active=True)).distinct()
            if docs:
                print(f'curicls -pr - {employee}')
                Progress.objects.bulk_create([Progress(doc_title=doc, emp_name=employee, version=doc.version,
                                                   dead_line_date=datetime.now() + timedelta(days=30)) for doc
                                          in docs])

Ответы

Ответов пока нет.