Как я могу получить доступ к внешнему ключу на другой стороне?
Я работаю над проектами с использованием 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, потому что в моем случае у каждой кошки есть единственный владелец.
Моя цель - сделать это, используя только один запрос.
Чтобы получить все Cat
экземпляры из Owner
экземпляра в представлении, вы можете сделать:
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 %}
Вы можете добавить 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()
Вы получите все объекты, на которые ссылается ForeignKey в вашей Cats
модели.