Advertisement
ur001

Изменение статуса размещения гида на сайте

Jul 16th, 2019 (edited)
546
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.67 KB | None | 0 0
  1. ########################################################################
  2. # Где-то в коде проекта происходит
  3. # Изменение статуса размещения гида на сайте
  4. ########################################################################
  5. with transaction.atomic():
  6.     ...
  7.     guide = Guide.objects.select_for_update().get(pk=XXX)
  8.     guide.placement_status = GuidePlacementStatus.STOPED
  9.     guide.save(update_fields=['placement_status'])
  10.     ...
  11.  
  12. ########################################################################
  13. # По django-сигналу изменения объекта гида происходит
  14. # обновление видимости всех его экскурсий (экспириенсов)
  15. ########################################################################
  16.  
  17. @receiver(post_save, sender=Guide)
  18. def update_experience_visibility_after_guide_placement_status_change(sender, instance: Guide, created, **kwargs):
  19.     """Обновление видимости экспириенсов гида после смены статуса его размещения"""
  20.     guide = instance
  21.     if guide.is_changed('placement_status'):
  22.         for exp_id in guide.experiences_created.values_list('pk', flat=True):
  23.             update_guide_exp_visibility(exp_id)
  24.  
  25. ########################################################################
  26. # Проблема:
  27. # синхронный вызов тяжёлой задачи  `update_guide_exp_visibility`
  28. # блокирует интерфейс и обламывает пользователя задержкой
  29. # Как решить эту проблему?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement