Reputation: 1059
i have a queryset that contains age of traveller.
qset = Travellers.objects.filter(traveller_type='1')
print(qset)
print(qset[0].traveller_age)
travellers_formset = TravellersFormset(queryset = qset)
this gives give:
<QuerySet [<Travellers: Travellers object (16887)>]>
33
i intend have a flag (is_renewal), which if true, should update the age of traveller by a year before passing to queryset to formset. so i'm doing something like this
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())
this gives
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
Upvotes: 0
Views: 157
Reputation: 32294
You can use update in combination with F
to increment a field
qset = Travellers.objects.filter(traveller_type='1')
qset.filter(is_renewal=True).update(age=F('age') + 1)
travellers_formset = TravellersFormset(queryset = qset)
Since qset
was not evaluated by the update (the filter returned a new queryset) it will return the updated rows when evaluated
Upvotes: 1