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")
Asked By: harry G

||

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")
Answered By: James Lin
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.

Answered By: Pruthvi Barot
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.