Django signal post save не работает в docker
У меня есть модель 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])
Источник: Stack Overflow на русском