Django - Простой список задач с галочками

У меня есть следующие модели django:

class Tasks(models.Model):
  date_created = models.DateTimeField(auto_now_add=True)
  date_changed = models.DateTimeField(auto_now=True, auto_now_add=False)
  title = models.CharField(verbose_name=_('Title'), max_length=50)
  content = HTMLField(verbose_name=_('Content'), max_length=8000)


class TasksStatus(models.Model):
  date_created = models.DateTimeField(auto_now_add=True)
  date_changed = models.DateTimeField(auto_now=True, auto_now_add=False)
  task = models.ForeignKey(Tasks, on_delete=models.SET_NULL, null=True, related_name="task_status")
  user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="task_user_id", on_delete=models.CASCADE, verbose_name=_("User"))
  checked = models.BooleanField(default=False, null=True, verbose_name=_("Checked"))

На шаблоне я хочу разместить все задачи, которые существуют, и дать пользователю возможность отметить каждую задачу. Это уже записано в базу данных ajax представлением:

class UpdateTaskStatus(LoginRequiredMixin, View):
  def dispatch(self, request, *args, **kwargs):
    return super(UpdateTaskStatus, self).dispatch(request, *args, **kwargs)

  def post(self, request):
    task_id = request.POST.get("task_id")
    task_status = request.POST.get("task_status")
    task = Tasks.objects.get(id=task_id)
    if (task_status == "0"):
        task_status = True
    else:
        task_status = None
    object, created = TasksStatus.objects.get_or_create(user=request.user, task=task)
    object.checked = task_status
    object.save()

    tasks = Tasks.objects.all()
    tasks_completed = TasksStatus.objects.filter(user=request.user, checked=True).count()
    if (tasks.count() != 0):
        if (tasks_completed != 0):
            tasks_completed = int(round((tasks_completed / tasks.count()) * 100, 0))

    return JsonResponse({"task_id": task_id, "task_status": task_status,"tasks_completed": tasks_completed, "msg": "Task status updated."})

Представление, которое приходит в шаблон, следующее:

@login_required
def participation_dashboard(request):
  user = request.user
  if user.groups.filter(name='teacher').exists():
      defaultTagGenerator(user)

  dt = timezone.now()
  all_data = request.GET.get('filter', None)
  days_dict = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 0}
  appointments = Appointment.objects.filter(Q(user_id=user), Q(date__week_day__gte=days_dict[dt.weekday()]),
                                            Q(date__time__gt=dt.time()), ~Q(classification=choices.FREE)).order_by(
                                            'date__week_day', 'date__time')
  if not all_data:
      appointments = appointments[:2]
 
 # Get tasks from database
  tasks = Tasks.objects.all()
  tasks_checked = Tasks.objects.filter(task_status__user=user)
  tasks_completed = TasksStatus.objects.filter(user=user, checked=True).count()
  if (tasks.count() != 0):
      if (tasks_completed != 0):
          tasks_completed = int(round((tasks_completed / tasks.count()) * 100, 0))
  return render(request, 'participation_dashboard.html', {'appointments': appointments, 'dt': dt, 'tasks': tasks, 'tasks_checked': tasks_checked, 'tasks_completed': tasks_completed})

С чем у меня возникают трудности, так это с правильным отображением шаблона. Сам шаблон выглядит следующим образом:

{% for task in tasks %}
  <div class="card kk-card dashboard_content_item kk-card-confirmed">
      <div class="card-header d-flex" style="border-bottom: none !important;">
          <div class="justify-content-start" style=" padding: 0px; margin: 0px; background-color: white; top: 0px; left: 0px; position: absolute;">
              {% for task_checked in tasks_checked %}
                  {% if task.id == task_checked.id %}
                      {% if task_checked %}
                          <i task-status="1" task-id="{{ task.id }}" class="task far fa-check-square"></i>
                      {% endif %}
                  {% endif %}
                  <i task-status="0" task-id="{{ task.id }}" class="task far fa-square"></i>
              {% endfor %}
          </div>
          <a style="padding-left: 25px; padding-top: 3px;" class="justify-content-start" data-toggle="collapse" href="#" data-target="#task_sub_content{{ forloop.counter0 }}">
                  {{ task.title }}
          </a>
      </div>
        <div class="card-body collapse" id="task_sub_content{{ forloop.counter0 }}">
          <p class="card-text">
              {{ task.content | safe }}
            </p>
        </div>
    </div>
{% endfor %}

Как я могу отобразить, отметил ли пользователь задачу. В моем понимании мне нужен связанный поиск по задачам, но с двумя внешними ключами user и task id, как это делается? Мой пример заканчивается так:

Tasks

Вернуться на верх