Irfan Harun
Irfan Harun

Reputation: 1059

update field of queryset before passing to formset in django

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

Answers (1)

Iain Shelvington
Iain Shelvington

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

Related Questions