Reputation: 129
View.py
@login_required
def UnosPosudbe(request):
if request.method == 'GET':
forma = PosudbaForma()
elif request.method == 'POST':
forma = PosudbaForma(request.POST,request.FILES)
if forma.is_valid():
#Dohvacanje Kolicine
kolicinaKnjige = str(forma.cleaned_data['nazivKnjige'])
IDKnjige = kolicinaKnjige
kolicinaKnjige = kolicinaKnjige[-1:]
IDKnjige = IDKnjige[:1]
unesenaKolicina = forma.cleaned_data['kolicina']
if(int(kolicinaKnjige)>=unesenaKolicina and unesenaKolicina > 0):
#update kolicine
knjiga = Knjiga.objects.get(pk=IDKnjige)
knjiga.kolicina = int(knjiga.kolicina) - int(unesenaKolicina)
print(knjiga)
knjiga_forma = KnjigaForma(request.POST, instance = knjiga)
knjiga_forma.save()
#
forma.save()
return redirect('pregledPosudbe')
return render(request, 'unosPosudbe.html', {'forma':forma})
I am trying to update database with part of code but I am keep getting error:
knjiga = Knjiga.objects.get(pk=IDKnjige)
knjiga.kolicina = int(knjiga.kolicina) - int(unesenaKolicina)
print(knjiga)
knjiga_forma = KnjigaForma(request.POST, instance = knjiga)
knjiga_forma.save()
Error:
ValueError at /UnosPosudbe/ The Knjiga could not be changed because the data didn't validate.
I am not sure what I am doing wrong?
Models.py
class Knjiga(models.Model):
naziv = models.CharField(null=False, blank=True, max_length=120)
autor = models.ForeignKey(Autor, on_delete=models.CASCADE, null=True)
datumObjave = models.DateField(null=True, blank=False)
izdanje = models.CharField(null=True, blank=True, max_length=120)
slika= models.FileField(upload_to='images/', null=True, verbose_name="") #videofile
kolicina = models.IntegerField(null=False, blank=False)
def __str__(self):
return str(self.id) + ', ' +str(self.naziv) + ', ' + str(self.autor) + ', Kolicina:' + str(self.kolicina)
-----UPDATE----
Everything works for above problem. But now I want to do when I delete created line that it gets quantity back to my "knjiga.kolicina".
Delete works like:
@login_required def deletePosudbe(request, id): data = Posudba.objects.get(id=id)
IDKnjige = data
kolicinaKnjige = IDKnjige[-1:]
IDKnjige = IDKnjige[:1]
print(kolicinaKnjige)
print(IDKnjige)
data.delete()
return redirect('pregledPosudbe')
I get error:
TypeError at /deletePosudbe/22 'Posudba' object is not subscriptable
I am trying to do same to fetch ID and quantity and update it back.
Upvotes: 0
Views: 73
Reputation: 1261
Where is validation of KnjigaForma(request.POST, instance=knjiga)
? you need it...
from django.db.models import F
@login_required
def UnosPosudbe(request):
if request.method == 'GET':
forma = PosudbaForma()
elif request.method == 'POST':
forma = PosudbaForma(request.POST,request.FILES)
if forma.is_valid():
#Dohvacanje Kolicine
kolicinaKnjige = str(forma.cleaned_data['nazivKnjige'])
IDKnjige = kolicinaKnjige
kolicinaKnjige = kolicinaKnjige[-1:]
IDKnjige = IDKnjige[:1]
unesenaKolicina = forma.cleaned_data['kolicina']
if(int(kolicinaKnjige)>=unesenaKolicina and unesenaKolicina > 0):
#update kolicine
knjiga = Knjiga.objects.get(pk=IDKnjige)
knjiga.kolicina = int(knjiga.kolicina) - int(unesenaKolicina) # This is better option (Everything happens on the database side. more safe) => knjiga.kolicina = F('kolicina') - int(unesenaKolicina)
knjiga.save() # add save method here
print(knjiga)
knjiga_forma = KnjigaForma(request.POST, instance = knjiga)
if knjiga_forma.is_valid(): # add this line
knjiga_forma.save()
forma.save()
return redirect('pregledPosudbe')
return render(request, 'unosPosudbe.html', {'forma':forma})
from django.http import HttpResponseNotFound
@login_required
def deletePosudbe(request, id):
try
data = Posudba.objects.get(id=id)
except Posudba.DoesNotExist:
return HttpResponseNotFound('Resource does not exist!')
else:
print('data => ', data)
print('data.__dict__ => ', data.__dict__)
data.delete() # you can delete safe way now.
return redirect('pregledPosudbe')
I hope, this code will work. Good luck.
Upvotes: 1