Как получить объект модели 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")
Идея заключается в том, что один пользователь может иметь любое количество списков и делиться этими списками с другими пользователями, если они захотят это сделать.
Я пытаюсь написать три вопроса:
- Верните все
List
, созданные пользователем - Вернуть все
List
, которые находятся в общем доступе для пользователя - Вернуть все вышеперечисленное
Пока кажется, что 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))