2011-05-28 74 views
1

插入一行到具有一個一對一關係的表ForeignKey的預防選擇查詢,你會在Django做到這一點:在主鍵時被稱爲

mypk=2 # Comes from the POST request 
model=MyModel(myField="Hello", myForeignModel=ForeignModel.objects.get(pk=mypk)) 
model.save() 

這將導致一個SELECT查詢後跟INSERT查詢。

但是,SELECT查詢並不是真的必要,因爲它將插入到外鍵字段中的mypk。有沒有辦法讓Django插入主鍵而不做SELECT?

其次,這裏是否存在併發問題(如果在用戶提交請求之前主鍵會發生變化)。如果是這樣,這些如何處理?

+0

好像你想在這之前加載'mypk'來驗證表單值是否有效,用戶是否有權限等。 – 2011-05-28 19:49:17

+0

mypk存儲在Javascript中,並通過AJAX請求發送。所有用戶都有權限並且受到CSRF的保護。 – bcoughlan 2011-05-28 19:51:48

回答

1

the docs

在幕後,Django的附加"_id"字段名來創建其數據庫列名。

只需將myForeignModel_id設置爲FK值即可。

+0

完美。使用SQL分析器對其進行測試,並且SELECT查詢已消失。 – bcoughlan 2011-05-28 20:21:18