Во-первых, вам действительно нужно 2 отдельных приложения? Будут ли списки содержать вещи, отличные от задач, которые настолько различны, что вам нужно выделять эти вещи? Возможно, вы могли бы поместить List и Task в один и тот же modely.py в одном приложении.
Во-вторых, в таком случае вы будете иметь некоторую взаимосвязанность. Это нормально. Не все должно быть отдельным и независимым.
Теперь, как выглядят ваши модели?
Если в списке много задач, у вас должен быть ForeignKey, как вы упомянули. Примерно так (упрощенно):
class List(models.Model):
title = models.CharField(max_length=100)
class Task(models.Model):
title = models.CharField(max_length=100)
list = ForeignKey(List, on_delete=models.CASCADE, related_name='tasks')
Теперь вы можете упростить ваши взгляды:
from .models import List
def lists_view(request):
lists = List.objects.all()
context = {
'lists': lists,
}
return render(request, 'lists/lists.html', context)
def list_view(request, pk):
list = List.objects.get(id=pk)
context = {
'list': list,
}
return render(request, 'lists/list.html', context)
ПРИМЕЧАНИЕ: приведенные выше наборы запросов должны быть оптимизированы с помощью prefetch_related (), чтобы уменьшить количество вызовов до дБ.
Так
List.objects.prefetch_related('tasks').all()
и
List.objects.prefetch_related('tasks').get(id=pk)
И вы можете сделать следующее в своем шаблоне:
{% for list in lists %}
<h1><a href="{% url 'list-detail' list.id %}">{{ list.title|title }}</a></h1>
<ul>
{% for task in list.tasks %}
<li><a href="{% url 'task-detail' task.id %}">{{ task.title|capfirst }}</a></li>
{% endfor %}
</ul>
{% endfor %}