如何使用 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")

想法是,单个用户可以拥有任意数量的列表,并在其他用户愿意的情况下将这些列表共享给其他用户。

我正在尝试编写三个查询:

  1. Return 由用户
  2. 创建的所有 List
  3. Return 所有 List 共享给用户
  4. 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>)