При написании django-запросов можно использовать оба id / pk в качестве параметров запроса.
Object.objects.get(id=1)
Object.objects.get(pk=1)
Я знаю, что pk обозначает Primary Key и является просто ярлыком, согласно документации django. Однако неясно, когда следует использовать id или pk.
django
orm
primary-key
Искусство
источник
источник
id
и дляpk
Ответы:
Это не важно
pk
более независимой от поля фактического первичного ключа т.е. вам не нужно заботиться ли называется полем первичного ключаid
илиobject_id
или любой другой .Это также обеспечивает большую согласованность, если у вас есть модели с разными полями первичного ключа.
источник
id
это также встроенная функция в Python, поэтому я предпочитаю использовать pk.pk
предпочтительнее Смотрите документацию по встроенной функцииid
в стандартной библиотеке Python. (В проектах Django, где я знаю, что
pk
всегда возвращается,id
я предпочитаю использовать,id
когда это не конфликтует сid()
функцией (везде, кроме имен переменных). Причиной этого является то, чтоpk
это свойство в 7 раз медленнее, чемid
поиск времениpk
имени атрибутаmeta
.Вот соответствующий код Django:
Это действительно редкий случай, когда мне нужно использовать переменную с именем
pk
. Я предпочитаю использовать что-то более многословное, например,user_id
вместоpk
.Следование одному и тому же соглашению предпочтительнее для всего проекта. В вашем случае
id
это имя параметра, а не свойство, поэтому разница во времени практически отсутствует. Имена параметров не конфликтуют с именем встроеннойid()
функции, поэтому здесь можно безопасно использоватьid
.Подводя итог, вам решать, использовать ли имя поля
id
илиpk
ярлык. Если вы не разрабатываете библиотеку для Django и используете автоматические поля первичного ключа для всех моделей, ее можно использоватьid
везде, что иногда быстрее. С другой стороны, если вам нужен универсальный доступ к (возможно, настраиваемым) полям первичного ключа, используйте егоpk
везде. Треть микросекунды - ничто для сети.источник