python - 在传递到 Django 中的表单集之前更新查询集的字段
问题描述
我有一个包含旅行者年龄的查询集。
qset = Travellers.objects.filter(traveller_type='1')
print(qset)
print(qset[0].traveller_age)
travellers_formset = TravellersFormset(queryset = qset)
这给了:
<QuerySet [<Travellers: Travellers object (16887)>]>
33
我打算有一个标志(is_renewal),如果为真,应该在传递到查询集到表单集之前将旅行者的年龄更新一年。所以我正在做这样的事情
if travel_quote.is_renewal:
print('starting renewal section')
for each in qset.iterator():
print(each)
print(each.traveller_age)
each.traveller_age = each.traveller_age + 1
print(each.traveller_age)
print('renewal section completed, checking for updated age')
print(qset[0].get_fields())
这给了
starting renewal section
<QuerySet [<Travellers: Travellers object (16887)>]>
33
34
renewal section completed, checking for updated age
33 <<<<< i want this to be 34 instead of 33 after the loop
解决方案
您可以结合使用 updateF
来增加字段
qset = Travellers.objects.filter(traveller_type='1')
qset.filter(is_renewal=True).update(age=F('age') + 1)
travellers_formset = TravellersFormset(queryset = qset)
由于qset
没有被更新评估(过滤器返回一个新的查询集),它将在评估时返回更新的行