簡體   English   中英

Django:如何僅更新數據庫中的一條記錄?

[英]Django: How do I update only ONE record in my database?

我在嘗試更新數據庫中的單個(記錄)object 時遇到了很多麻煩。

context['eval_list'] = Evaluering.objects.update(eval_relationer_id=self.kwargs.get('pk'))

我使用objects.update,但它會更新我所有的對象fk。 如何實現只更新一個 object? 我也試過這個:

context['eval_list'] = Evaluering.objects.update_or_create(eval_relationer_id=self.kwargs.get('pk'))

但這會創建一個新的 object 並且不會更新我要更新的記錄。 我知道它為什么會創建一個新對象,這是因為我要更新的 FK 是 null。 當然,必須有一種方法只更新而不創建單個記錄? 我在這里想念什么?

我嘗試添加過濾器,但感覺多余? 我試過這個:

context['eval_list'] = Evaluering.objects.filter(eval_relationer_id=self.kwargs.get('pk')).update(eval_relationer_id=self.kwargs.get('pk'))

我確實考慮過嘗試立即而不是稍后創建 FK 的 ID,但我無法真正讓它工作,但如果我創建了一個 ID,那么 update_or_create 將工作,因為一個 ID 已經存在,但我不敢相信我不能在沒有創建的情況下更新單個 object

如果之前創建 ID 是唯一的解決方法,我將不得不弄清楚如何。

MyModel.objects.filter(pk=some_value).update(field1='some value')

過濾器獲取您的Queryset (返回僅包含該對象的查詢集),然后更新將其他一些不是PK的字段更改為您想要的任何內容。

在你的情況下可能是這樣的:

context['eval_list'] = Evaluering.objects.filter(eval_relationer_id=self.kwargs.get('pk')).update(some_attribute='some value')

在@Hanny 的幫助下,我發現出了問題。

我試圖通過 eval_relationer_id 進行過濾,而我應該通過評估 pk 進行過濾並獲得特定的 PK。 否則我會更新所有不是我想要的值。

所以通過pk過濾:

filter(pk=self.kwargs.get('pk'))

並通過我要更新的屬性 / fk 進行更新

update(eval_relationer_id=self.kwargs.get('pk'))

這是最終結果:

context['eval_list'] = Evaluering.objects.filter(pk=self.kwargs.get('pk')).update(eval_relationer_id=self.kwargs.get('pk'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM