#python #sql #django
#python #sql #django
Вопрос:
чтобы вставить строку в таблицу, имеющую отношение «один к одному», вы должны сделать это в Django:
mypk=2 # Comes from the POST request
model=MyModel(myField="Hello", myForeignModel=ForeignModel.objects.get(pk=mypk))
model.save()
Это вызовет запрос SELECT, за которым последует запрос INSERT.
Однако запрос SELECT на самом деле не нужен, поскольку это будет mypk
то, что вставляется в поле foreign key. Есть ли способ заставить Django просто вставить первичный ключ, не выполняя SELECT?
Во-вторых, существуют ли здесь проблемы с параллелизмом (в случае, если первичный ключ изменится до того, как пользователь отправит запрос). Если да, то как с ними справляются?
Комментарии:
1. Похоже, вы все равно хотели бы загружать
mypk
до этого, чтобы проверить, что значения формы действительны, что у пользователя есть разрешение и т.д.2. mypk хранится в Javascript и отправляется AJAX-запросом. У всех пользователей есть разрешение, и оно защищено от CSRF.
Ответ №1:
Из документов:
За кулисами Django добавляет
"_id"
к имени поля, чтобы создать имя столбца базы данных.
Просто установите myForeignModel_id
значение FK.
Комментарии:
1. Идеальный. Протестировал это с помощью профилировщика SQL, и запрос SELECT исчез.