繁体   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