user9252255
user9252255

Reputation:

Django: Passing data to views from pre_save

I have the following issue: I want to pass data from my model pre_save function to my views.py

The reason is that in my pre_save function, there is a unique order_id generated. This unique order id must also be saved in a session id (request.session['order_id'] = unique_order_id). Models don't accept a request, so I am trying to save it in my views.py, but how do I get the generated unique order id there?

Appreciate your help!

views.py

def another_view(request):

    if request.POST:
        # Generate unique order_id
        x = Order().save()
        request.session['order_id'] = x
        # This is how I hoped it to solve, but x is not passing any data, even when adding a return variable in pre_save 

models.py

# Imports (removed)
# Create your models here.
class Order(models.Model):
    order_id    = models.CharField(max_length=10, unique=True)
    updated     = models.DateTimeField(auto_now=True)
    timestamp   = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.order_id)

def order_pre_save_receiver(sender, instance, *args, **kwargs):
    instance.order_id = unique_id_generator(instance)
    # Here the unique order id is generated. Additionally I want to save this id as a session.



pre_save.connect(order_pre_save_receiver, sender=Order)

Upvotes: 0

Views: 88

Answers (1)

Bhavani Ravi
Bhavani Ravi

Reputation: 2291

when you call x = Order().save() you are creating an order object updating it and not preserving it

save() method does not returns any model object instead updates the object it is called with

So what you have to do is

x = Order()
x.save() # at this point pre_save is called and unique id is updated
x.order_id # will be your updated order id

Upvotes: 1

Related Questions