Django change and track order status
Question:
I have a status field in my model with a default value in progress. Whenever a new order is created a default value of in-progress is given to the order. Now I have added a new function, when a customer enters the order id it displays the status of the order. I want to add new functionality to my function in which when the customer enters the order.id and clicks track the order status should automatically change to scheduled and if I update the order status later on it shouldn’t show schedule instead the status I will select. What can I add in my views function to make that work?
models.py
class Order(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=100
status = models.CharField(max_length = 100, choices = choices) default="In Progress")
choices = (('Received', 'Received'),
('Scheduled', 'Scheduled'),
('Shipped', 'Shipped'),
('In Progress','In Progress'),
)```
views.py
def order_tracker(request):
if request.method=="POST":
orderId = request.POST.get('orderId', '')
try:
order=Order.objects.filter(pk=orderId)
if len(order)>0:
update = Order.objects.filter(pk=orderId)
updates = []
for order in update:
order.status = 'Scheduled'
order.save()
updates.append({'status' : order.status})
response = json.dumps(updates)
return HttpResponse(response)
else:
return HttpResponse('{}')
except Exception as e:
return HttpResponse('{}')
return render(request,"status/track.html")
Answers:
def order_tracker(request):
if request.method=="POST":
orderId = request.POST.get('orderId', '')
try:
order=Order.objects.filter(pk=orderId)
if len(order)>0:
update = Order.objects.filter(pk=orderId)
updates = []
for order in update:
# change order status to scheduled
if order.status == 'processing':
order.status = 'scheduled'
order.save()
updates.append({'status' : order.status})
response = json.dumps(updates)
return HttpResponse(response)
else:
return HttpResponse('{}')
except Exception as e:
# add some logging here
return HttpResponse('{}')
return render(request,"tracker.html")
BTW, you seem like getting a list of orders? If you are supposed to only getting one order, please use Order.objects.get()
, which will raise DoesNotExist
exception if criteria is not matched.
def order_tracker(request):
if request.method=="POST":
orderId = request.POST.get('orderId', '')
try:
order=Order.objects.get(pk=orderId)
if order.status == 'processing':
order.status = 'scheduled'
order.save()
return JsonResponse({'status' : order.status})
except: Order.DoesNotExist:
return JsonResponse({})
return render(request,"tracker.html")
def order_tracker(request):
if request.method=="POST":
orderId = request.POST.get('orderId', '')
try:
order=Order.objects.filter(pk=orderId)
if len(order)>0:
update = Order.objects.filter(pk=orderId)
updates = []
for order in update:
order.status = 'Scheduled'
order.save()
updates.append({'status' : order.status})
response = json.dumps(updates)
return HttpResponse(response)
else:
return HttpResponse('{}')
except Exception as e:
return HttpResponse('{}')
return render(request,"tracker.html")
just assign status and save it.
I have a status field in my model with a default value in progress. Whenever a new order is created a default value of in-progress is given to the order. Now I have added a new function, when a customer enters the order id it displays the status of the order. I want to add new functionality to my function in which when the customer enters the order.id and clicks track the order status should automatically change to scheduled and if I update the order status later on it shouldn’t show schedule instead the status I will select. What can I add in my views function to make that work?
models.py
class Order(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=100
status = models.CharField(max_length = 100, choices = choices) default="In Progress")
choices = (('Received', 'Received'),
('Scheduled', 'Scheduled'),
('Shipped', 'Shipped'),
('In Progress','In Progress'),
)```
views.py
def order_tracker(request):
if request.method=="POST":
orderId = request.POST.get('orderId', '')
try:
order=Order.objects.filter(pk=orderId)
if len(order)>0:
update = Order.objects.filter(pk=orderId)
updates = []
for order in update:
order.status = 'Scheduled'
order.save()
updates.append({'status' : order.status})
response = json.dumps(updates)
return HttpResponse(response)
else:
return HttpResponse('{}')
except Exception as e:
return HttpResponse('{}')
return render(request,"status/track.html")
def order_tracker(request):
if request.method=="POST":
orderId = request.POST.get('orderId', '')
try:
order=Order.objects.filter(pk=orderId)
if len(order)>0:
update = Order.objects.filter(pk=orderId)
updates = []
for order in update:
# change order status to scheduled
if order.status == 'processing':
order.status = 'scheduled'
order.save()
updates.append({'status' : order.status})
response = json.dumps(updates)
return HttpResponse(response)
else:
return HttpResponse('{}')
except Exception as e:
# add some logging here
return HttpResponse('{}')
return render(request,"tracker.html")
BTW, you seem like getting a list of orders? If you are supposed to only getting one order, please use Order.objects.get()
, which will raise DoesNotExist
exception if criteria is not matched.
def order_tracker(request):
if request.method=="POST":
orderId = request.POST.get('orderId', '')
try:
order=Order.objects.get(pk=orderId)
if order.status == 'processing':
order.status = 'scheduled'
order.save()
return JsonResponse({'status' : order.status})
except: Order.DoesNotExist:
return JsonResponse({})
return render(request,"tracker.html")
def order_tracker(request):
if request.method=="POST":
orderId = request.POST.get('orderId', '')
try:
order=Order.objects.filter(pk=orderId)
if len(order)>0:
update = Order.objects.filter(pk=orderId)
updates = []
for order in update:
order.status = 'Scheduled'
order.save()
updates.append({'status' : order.status})
response = json.dumps(updates)
return HttpResponse(response)
else:
return HttpResponse('{}')
except Exception as e:
return HttpResponse('{}')
return render(request,"tracker.html")
just assign status and save it.