在传递给 Django 中的表单集之前更新查询集的字段

update field of queryset before passing to formset in 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

您可以结合使用更新和 F 来增加一个字段

qset = Travellers.objects.filter(traveller_type='1')
qset.filter(is_renewal=True).update(age=F('age') + 1)
travellers_formset = TravellersFormset(queryset = qset)

由于 qset 未被更新评估(过滤器 return 编辑了一个新的查询集)它将 return 评估时更新的行