Джанго: Почему в определении ForeignKey кавычки вокруг модели - PullRequest
9 голосов
/ 17 января 2011

Я хочу знать, в чем разница между этими двумя определениями иностранных ключей.

(1) MyFKField = models.ForeignKey('MyModel')
(2) MyFKField = models.ForeignKey(MyModel)

Я понимаю (я думаю ...), что (1) MyModel необходимо определить в этом же файлеи другие должны быть импортированы, но я не уверен в причинах / преимуществах того, чтобы делать это в любом случае.

Я просматривал документы Django, но ничего не мог найти, и я также не уверен, если этоэто правильное место, чтобы спросить, поэтому извинения, если нет.

Приветствия

Ответы [ 3 ]

9 голосов
/ 17 января 2011

Django docs утверждает, что вы будете использовать строку для (1):

  • Вы хотите рекурсивные отношения (например, - model.ForeignKey('self'))
  • Для ссылки на модель, которая, возможно, еще не определена (для циклических отношений).
  • Ярлык для ссылки на модель в другом приложении (например, - model.ForeignKey('app.mymodel'))

Но в целом, непосредственное указание класса модели понятно из (2).

8 голосов
/ 17 января 2011

Без кавычек это ссылка на модель, определенную в файле или импортированную с помощью import.С помощью кавычек Django отвечает за поиск модели среди всех моделей во всех установленных приложениях.

0 голосов
/ 02 февраля 2016

Если определение класса MyModel находится под определением класса MyFKField (в коде), то вы должны написать его между кавычками.

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