Reputation:
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
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