Джанго: доступ к неуникальным полям - PullRequest
0 голосов
/ 17 марта 2019

Я прошу прощения. Я также удивлен, что не могу найти этот вопрос уже заданным. Смущение в 3, 2, 1 ...

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

Допустим, у нас есть 2 человека и домашнее животное, упрощенное до примеров JSON:

Person 1: {
  id: 1,
  first_name: "John",
  last_name: "Doe"
}

Person 2: {
  id: 2,
  first_name: "Jane"
  last_name: "Doe"
}

Pet: {
  id: 1,
  name: "Guess",
  owner_first_name: "{I want person 1's, first_name string value here}",
  owner_last_name: "{I want person 1's, last_name string value here}"
}

Я понял, что объект требует уникальный первичный ключ, чаще всего «id», но должен быть способ получить доступ к вторичным полям после использования функционального PK. Я знаю, что models.to_field в настоящее время будет работать для доступа к имени, если для него установлено значение unique = True. В конце концов, появится еще один «Джон» или «Джейн», и здесь уже есть 2 «Доу».

Простите синтаксическую бойню за упрощение, но как мне получить это в Django?

Pet.owner_first_name = Person [id] .first_name (unique = False)

1 Ответ

0 голосов
/ 17 марта 2019

Если вы правильно определили свои отношения в своих моделях (с полем в Pet со ссылкой на владельца Person через ForeignKey), вы можете сделать это:

pet = Pet.objects.get(pk=1)
print(pet.owner.first_name, pet.owner.last_name)

Другими словами, когда вы связываете одну модель с другой, вы сохраняете в ссылочной модели (и соответствующей таблице базы данных) ссылку на первичный ключ указанной модели вместо конкретных атрибутов, таких как имя или фамилия.

Документы Django предлагают множество примеров использования различных типов отношений; соответствующий тип для вашего примера: отношения «многие-к-одному» .

...