2016-06-02 2 views
0

Мне нужно выполнить какой-то пользовательский raw SQL в Django (1.9). Поскольку таблицы в Django имеют префикс имени приложения, мне нужно получить имя приложения. Я хочу использовать тот же самый код в разных приложениях позже, поэтому я хотел бы получить имя приложения в мягком кодированном виде, просто учитывая, в каком файле находится код. Каким будет лучший способ сделать это?Django получить имя приложения из файла

ответ

4

Вместо того, чтобы «угадывать» имя таблицы, используя соглашение по умолчанию, вы должны использовать Model.objects.model._meta.db_table, чтобы получить настоящее имя.

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

+1

'Model.objects.model' это просто ссылка на' model'. Вы можете использовать 'Model._meta.db_table'. – knbk

+0

Отличная точка! Не могли бы вы предложить что-то простое, как 'Model._meta.db_table.split ('_') [0]', чтобы получить префикс? – Jarno

+2

@jarno не делает этого, он сломается, если 'db_table' был изменен на что-то без подчеркивания. Если вы хотите использовать имя приложения, используйте ['MyModel._meta.app_label'] (https://docs.djangoproject.com/en/1.9/ref/models/options/#app-label) – Alasdair