Как я могу запланировать удаление user_club?

Я пытаюсь реализовать следующую логику:

  1. Когда пользователь нажмет на кнопку удаления user_club, появится подсказка, позволяющая отменить этот запрос.
  2. Если в течение 5 секунд пользователь не предпримет никаких действий, мы продолжим удаление.
  3. Альтернативно, если пользователь выполнит действие отмены, я отменю запрос на удаление в базе данных.
  • Я пытаюсь реализовать использование PeriodicTask. Однако мне пока не удается это сделать. Пожалуйста, помогите мне решить проблему, с которой я столкнулся. Заранее благодарен.

  • Вот что я пытался сделать, но пока не получилось.

models.py

class UserClub(ItemBase):
    user = models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='user_club')
    club = models.ForeignKey(Club, on_delete=models.CASCADE)
    roles = models.ManyToManyField(Role)
    membership_id = models.CharField(max_length=255, blank=True, null=True)
    membership_expiry_date = models.DateField(max_length=255, blank=True, null=True)
    subscription = models.ForeignKey(to=Subscription, on_delete=models.SET_NULL, blank=True, null=True, related_name='user_club_subscription')
    default = models.BooleanField(default=False)
    reputation_point = models.PositiveIntegerField(default=0)

    class Meta:
        db_table = "sport_user_club"
        verbose_name = 'User Club'
        verbose_name_plural = 'User Club'

views.py

    def destroy(self, request, *args, **kwargs):
        user_club = self.get_object()
        task = task_schedule_del_user_club.apply_async(args=[user_club.uuid], countdown=10)
        self.response_format['data'] = {
            "task_id": task.id
        }
        self.response_format['message'] = "Club will be deleted after 5 seconds"
        return JsonResponse(data=self.response_format, status=status.HTTP_200_OK)

    @swagger_auto_schema(methods=['post'], request_body=UndoDeleteClubProcessSerializer)
    @action(methods=['post'], detail=False, url_path="undo-request", url_name='undo-request')
    def undo_request_remove_club(self, request, *args, **kwargs):
        serializer = UndoDeleteClubProcessSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer_data = serializer.validated_data
        if serializer_data['is_undo_request']:
            try:
                task_schedule_del_user_club.AsyncResult(serializer_data['task_uuid'])
                self.response_format['message'] = "Undo request successfully"
                return JsonResponse(self.response_format, status=status.HTTP_200_OK)
            except Exception as e:
                logger.error(e)
                raise BaseError(_("Cancel an unsuccessful idea or proposal. Please try again!"))

tasks.py

@app.task
def task_schedule_del_user_club(user_club_uuid):
    try:
        user_club = UserClub.objects.get(uuid=user_club_uuid)
        user_club.delete()
    except UserClub.DoesNotExist:
        logger.warning(f"UserClub with id {user_club_uuid} does not exist.")
    except Exception as ex:
        logger.error(f"An error occurred while deleting UserClub: {ex}")
Вернуться на верх