我在视图上得到了这个长查询集语句
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
稍后在该视图中,我对表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
所以我想知道是否有任何方法可以避免重复我自己,重新评估贡献,使其真正反映数据库中的真实数据。理想情况下,我会修改查询集的贡献,它的值会被更新,同时数据库会反映这些变化,但我不知道该怎么做。
更新:这是我在两个上下文 ['contributions'] = 贡献之间所做的
我将一个新的贡献对象添加到贡献_选择(这是一个 m2m 关系),
contribution = Contribution.objects.create(kwarg=something,kwarg2=somethingelse)
user_profile.contributions_chosen.add(contribution)
contribution.save()
user_profile.save()
在某些情况下,我删除了一个贡献对象contribution = user_profile.contributions_chosen.get(id=1) user_profile.contributions_chosen.get(id=request.POST['con contributions.delete()
如您所见,我正在修改表contribution_chosen,因此我必须重新发出查询并更新上下文。我究竟做错了什么?
更新在看到您关于评估的评论后,我意识到我确实评估了我在 context['contribution'] 之间执行 len(contributions) 的查询集,这似乎是个问题。我会在数据库操作之后移动它,就是这样,谢谢。