code: def save_task(task, broker):
      
      # SAVE LIMIT < 0 : Don't save success
      if not task.get('save', Conf.SAVE_LIMIT >= 0) and task['success']:
          return
      # enqueues next in a chain
      if task.get('chain', None):
          django_q.tasks.async_chain(task['chain'], group=task['group'], cached=task['cached'], sync=task['sync'], broker=broker)
      # SAVE LIMIT > 0: Prune database, SAVE_LIMIT 0: No pruning
      db.close_old_connections()
      try:
          if task['success'] and 0 < Conf.SAVE_LIMIT <= Success.objects.count():
              Success.objects.last().delete()
          # check if this task has previous results
          if Task.objects.filter(id=task['id'], name=task['name']).exists():
              existing_task = Task.objects.get(id=task['id'], name=task['name'])
              # only update the result if it hasn't succeeded yet
              if not existing_task.success:
                  existing_task.stopped = task['stopped']
                  existing_task.result = task['result']
                  existing_task.success = task['success']
                  existing_task.save()
          else:
              Task.objects.create(id=task['id'],
                                  name=task['name'],
                                  func=task['func'],
                                  hook=task.get('hook'),
                                  args=task['args'],
                                  kwargs=task['kwargs'],
                                  started=task['started'],
                                  stopped=task['stopped'],
                                  result=task['result'],
                                  group=task.get('group'),
                                  success=task['success']
                                  )
      except Exception as e:
          logger.error(e)
docs: Saves the task package to Django or the cache