Как я могу получить доступ к внешнему ключу на другой стороне?

Я работаю над проектами с использованием 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 модели.

Вернуться на верх