Reputation: 23
My model
class Credits(models.Model):
creds = models.IntegerField(default=0)
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
My view
def addjobdata(request):
n = JobInfo.objects.create(title=request.POST['title'], start_date=timezone.now(), end_date=timezone.now() + datetime.timedelta(days=int(request.POST['days'])), rate=request.POST['rate'] )
if int(Credits.objects.get(user_id=request.user).creds) > int(request.POST['days']):
Credits.objects.get(user_id=request.user).creds -= int(request.POST['days'])
Credits.objects.get(user_id=request.user).creds.save()
return HttpResponseRedirect(reverse('datedisplay:infos', args=(n.id,)))
else:
return render(request, 'datedisplay/menu.html')
In the if loop I am trying to take a number from an integer field and save the result but am failing to do so. Any ideas where I've messed up?
Upvotes: 0
Views: 30
Reputation: 599530
You're repeatedly querying the same object. Quite apart from the unnecessary load on the database, each time you query you get a new object, which doesn't contain the changes you made.
Instead query it once and save to a variable:
cred = Credits.objects.get(user=request.user)
days = int(request.POST['days'])
if cred.creds > days:
cred.creds -= days
cred.save()
return HttpResponseRedirect(reverse('datedisplay:infos', args=(n.id,)))
Also note, you need to save the Credits instance itself, not the creds
attribute.
Upvotes: 1