gpt4 book ai didi

python - 对数据库进行更改后重新评估 django 查询

转载 作者:太空狗 更新时间:2023-10-30 00:00:09 27 4
gpt4 key购买 nike

我在一个 View 上得到了这个长查询集语句

    contributions = user_profile.contributions_chosen.all()\
.filter(payed=False).filter(belongs_to=concert)\
.filter(contribution_def__left__gt=0)\
.filter(contribution_def__type_of='ticket')

我在我的模板中使用

context['contributions'] = contributions

然后在该 View 上,我对表 contributions_chosen 进行了更改(添加或删除记录),如果我想更新我的上下文 ['contributions'],我需要使用相同的长查询重新查询数据库。

contributions = user_profile.contributions_chosen.all()\
.filter(payed=False).filter(belongs_to=concert)\
.filter(contribution_def__left__gt=0)\
.filter(contribution_def__type_of='ticket')

然后再次更新我的上下文

context['contributions'] = contributions

所以我想知道是否有任何方法可以避免重复我的 self ,重新评估贡献,使其真正反射(reflect)数据库中的真实数据。理想情况下,我会修改查询集贡献并更新其值,同时数据库会反射(reflect)此更改,但我不知道该怎么做。

更新:这就是我在两者之间所做的 context['contributions'] = 贡献

我向 contributions_chosen 添加了一个新的贡献对象(这是一个 m2m 关系),

contribution = Contribution.objects.create(kwarg=something,kwarg2=somethingelse)
user_profile.contributions_chosen.add(contribution)
contribution.save()
user_profile.save()

在某些情况下,我会删除一个贡献对象 贡献 = user_profile.contributions_chosen.get(id=1) user_profile.contributions_chosen.get(id=request.POST['con 贡献.删除()

如您所见,我正在修改表 contributions_chosen,因此我必须重新发出查询并更新上下文。我做错了什么?

更新在看到你关于评估的评论后,我意识到我确实评估了我所做的查询集len(contributions) 介于 context['contribution'] 之间,这似乎是个问题。我将在数据库操作之后移动它,仅此而已,谢谢。

最佳答案

更新似乎您还没有评估查询集 contributions,因此无需担心更新它,因为它仍然没有从数据库中获取数据。

您可以在两行 context['contributions'] = contributions 之间发布代码吗?通常在您评估查询集 contributions 之前(例如通过迭代它或调用它的 __len__()),它不包含从数据库读取的任何内容,因此您不必须更新它的内容。

要重新评估查询集,您可以

# make a clone
contribution._clone()
# or any op that makes clone, for example
contribution.filter()

# or clear its cache
contribution._result_cache = None

# you could even directly add new item to contribution._result_cache,
# but its could cause unexpected behavior w/o carefulness

关于python - 对数据库进行更改后重新评估 django 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10434172/

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