gpt4 book ai didi

python - 如何复制查询集 Django

转载 作者:太空宇宙 更新时间:2023-11-04 03:07:18 25 4
gpt4 key购买 nike

我试图在保存 def save_related(self, request, form, *args, **kwargs) 方法之前和之后访问 ManyToManyField 的查询集。我想比较它们并获取添加到 ManyToManyField 的新对象。

所以,我得到了旧的查询集:

def save_related(self, request, form, * args, * * kwargs):
obj = form.instance
queryset_before = obj.translations.all()
print(queryset_before)
super(WordAdmin, self).save_related(request, form, * args, * * kwargs)
print(queryset_before)

但是 print(queryset_before) 在调用 super().save_related 之后输出新的、更新的查询集。

所以:

  1. 如何复制queryset,保存不影响?
  2. 或者有没有办法更恰本地比较 ManyToManyField 的旧值和新值?

最佳答案

你可以得到保存前后的ID列表,然后比较这些列表:

def save_related(self, request, form, *args, **kwargs):
obj = form.instance
list_before = list(obj.translations.all().values_list('pk', flat=True))
super(WordAdmin, self).save_related(request, form, *args, ** kwargs)
list_after = list(obj.translations.all().values_list('pk', flat=True))
added_ids = [x for x in list_after if x not in list_before]
removed_ids = [y for y in list_before if y not in list_after]

关于python - 如何复制查询集 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39063017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com