Как получить объект модели Django с помощью ForeignKey?

Я новичок в Django и мне трудно понять, как работают поисковые запросы. У меня есть такие модели:

User = settings.AUTH_USER_MODEL

class List(models.Model):
    user = models.ForeignKey(User, default=1, null=True, on_delete=models.SET_NULL)
    name = models.CharField(max_length=200)

class ListShared(models.Model):
    shared_list = models.ForeignKey(List, on_delete=models.CASCADE, related_name="shared_list")
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="sub_user")

Идея заключается в том, что один пользователь может иметь любое количество списков и делиться этими списками с другими пользователями, если они захотят это сделать.

Я пытаюсь написать три вопроса:

  1. Верните все List, созданные пользователем
  2. Вернуть все List, которые находятся в общем доступе для пользователя
  3. Вернуть все вышеперечисленное

Пока кажется, что 1. можно достичь с помощью :

parent = User.objects.get(username=user_name)
lists = parent.list_set.all()

и 2. с:

lists = ListShared.objects.filter(user__exact=user)

Но я не могу найти способ вернуть все, к которым подключен пользователь (3.). Как я могу этого добиться?

Вы можете фильтровать с помощью Q объектов [Django-doc]:

from django.db.models import Q

List.objects.filter(Q(user=parent) | Q(shared_list__user=parent))

или если вам не нужно получать сам объект User, вы можете работать с user_name напрямую с помощью:

from django.db.models import Q

List.objects.filter(Q(user__username=user_name) | Q(shared_list__user__username=user_name))
Вернуться на верх