首页 > 解决方案 > 在传递到 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

标签: pythondjangodjango-queryset

解决方案


您可以结合使用 updateF来增加字段

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

由于qset没有被更新评估(过滤器返回一个新的查询集),它将在评估时返回更新的行


推荐阅读