如何使用 ForeignKey 检索 Django 模型对象?
How to retrieve Django model object using 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")
想法是,单个用户可以拥有任意数量的列表,并在其他用户愿意的情况下将这些列表共享给其他用户。
我正在尝试编写三个查询:
- Return 由用户
创建的所有 List
- Return 所有
List
共享给用户
- Return以上
到目前为止,似乎 1. 可以通过 :
实现
parent = User.objects.get(username=user_name)
lists = parent.list_set.all()
和 2. 有:
lists = ListShared.objects.filter(user__exact=user)
但我似乎无法找到 return 每个用户连接到 (3.) 的方法。我怎样才能做到这一点?
您可以使用 Q
objects [Django-doc] 进行过滤:
from django.db.models import <strong>Q</strong>
List.objects.filter(<strong>Q(user=<i>parent</i>) | Q(shared_list__user=<i>parent</i>)</strong>)
或者如果您不需要获取 User
对象本身,您可以直接使用 user_name
:
from django.db.models import <strong>Q</strong>
List.objects.filter(<strong>Q(user__username=<i>user_name</i>) | Q(shared_list__user__username=<i>user_name</i>)</strong>)
我是 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")
想法是,单个用户可以拥有任意数量的列表,并在其他用户愿意的情况下将这些列表共享给其他用户。
我正在尝试编写三个查询:
- Return 由用户 创建的所有
- Return 所有
List
共享给用户 - Return以上
List
到目前为止,似乎 1. 可以通过 :
实现parent = User.objects.get(username=user_name)
lists = parent.list_set.all()
和 2. 有:
lists = ListShared.objects.filter(user__exact=user)
但我似乎无法找到 return 每个用户连接到 (3.) 的方法。我怎样才能做到这一点?
您可以使用 Q
objects [Django-doc] 进行过滤:
from django.db.models import <strong>Q</strong>
List.objects.filter(<strong>Q(user=<i>parent</i>) | Q(shared_list__user=<i>parent</i>)</strong>)
或者如果您不需要获取 User
对象本身,您可以直接使用 user_name
:
from django.db.models import <strong>Q</strong>
List.objects.filter(<strong>Q(user__username=<i>user_name</i>) | Q(shared_list__user__username=<i>user_name</i>)</strong>)