django 如何才能访问到对方的外键?

lyr7nygr  于 2022-11-18  发布在  Go
关注(0)|答案(2)|浏览(115)

我正在用Django做一个项目。下面是我的models.py

class Owner(models.Model):
    name = models.CharField(max_length=200)

class Cat(models.Model):
    owner = models.ForeignKey(Owner, on_delete=models.CASCADE)
    pseudo = models.CharField(max_length=200)

我照做了:
first_owner = Owner.objects.get(id=1)
我想做一些类似的事情
first_owner.Cat
把所有的猫从主人那里弄来
我知道我可以做这样的事情:
first_cat = Owner.objects.get(id=1)
owner = first_cat.owner
但我希望在不使用ManyToMany字段的情况下进行反向操作,因为在我的情况下,每只猫都有一个唯一的主人。
我的目标是只使用一个查询来实现这一点。

iyr7buue

iyr7buue1#

要从视图中的Owner示例获取所有Cat示例,可以执行以下操作:

first_owner = get_object_or_404(Owner,id=1)

all_instances = first_owner.cat_set.all()

在模板中,您可以执行以下操作:

{% for owner in first_owner.cat_set.all %}
   {{owner.psuedo}}

{% endfor %}
qmb5sa22

qmb5sa222#

您可以在模型中添加related_name,并使用它从给定字段中获取作为ForeignKey引用的所有对象,如下所示:

class Cat(models.Model):
    owner = models.ForeignKey(Owner, on_delete=models.CASCADE, 
             related_name='cats') #---> you can put whatever related_name you want 
    pseudo = models.CharField(max_length=200)

并按如下方式查询它:

first_owner = Owner.objects.get(id=1)
all_instances = first_owner.cats.all()

您将获得Cats模型中作为ForeignKey引用的所有对象。

相关问题