Получение названия и значения внешнего ключа модели? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть следующая модель:

class Item(models.Model):
    owner = models.ForeignKey(Owner, on_delete=models.CASCADE)

Я хочу написать общую функцию / утилиту, чтобы получить имя внешнего ключа и значение, переданное в другую функцию в качестве аргумента:

В коде ниже я получаю FK

for field in self._meta.get_fields(include_parents=False):
            if isinstance(field, models.ForeignKey):
...........

function f2 ({fk_name:value, fk_name2:value})

Как мне получить имя (владельца) и значение (owner_id)?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018
for field in self._meta.get_fields(include_parents=False):
    if isinstance(field, models.ForeignKey):
        print(field.name, getattr(self, field.name, None))

это работает

0 голосов
/ 05 сентября 2018

A ForeignKey объект имеет атрибут attname, который указывает имя атрибута, содержащего значение первичного ключа, к которому он относится.

Для вашего owner значение field.attname будет здесь owner_id, если вы ничего не измените.

Мы можем определить словарь, который отображает имена ForeignKey s в атрибуты, которые хранят первичный ключ, например:

{
    field.name: field.attname
    for field in self._meta.get_fields(include_parents=False)
    if isinstance(field, models.ForeignKey)
}

Для вашей модели это сгенерирует словарь:

{'owner': 'owner_id'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...