我正在使用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
但是我想要反向操作而不使用manymany字段,因为在我的情况下,每只猫都有一个唯一的主人。
我的目标是只使用一个查询。
您可以在模型中添加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引用的所有对象。
要从视图中的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 %}