Как получить объект менеджера для поля внешнего ключа модели? - PullRequest
0 голосов
/ 05 апреля 2011

Я пытаюсь получить менеджер (или модель) для внешнего ключа Django. Это должно быть просто, но я не могу найти правильные атрибуты.

class ModelA(models.Model):
    pass

class ModelB(models.Model):
    thing = models.ForeignKey(ModelA)

Допустим, у меня есть переменная modelBInstance и строка "вещь", и я хочу получить ModelA. Я следовал (я думаю, что это исчерпывающе) очевидным атрибутам каждого объекта, используя getattr. Либо я что-то упустил, либо это невозможно. И я не думаю, что это невозможно.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Вся соответствующая информация о полях хранится в классе _meta модели.Там вы увидите метод get_field_by_name, который будет возвращать фактическое поле внешнего ключа.Оттуда вы можете получить модель, на которую она указывает, через rel.to.

thing = ModelB._meta.get_field_by_name('thing')[0]
print thing.rel.to
1 голос
/ 05 апреля 2011

Пара вещей: 1. У экземпляров модели нет менеджеров, у модели есть.2. Чтобы получить менеджер внешнего ключа, вам сначала нужно будет сослаться на его класс, а затем на него обратиться.менеджер.

...