I have model Order
class Order(models.Model):
STATUS = (
('Pending', 'Pending'),
('Out for delivery', 'Out for delivery'),
('Delivered', 'Delivered'),
)
shop = models.ForeignKey(Shop, models.CASCADE, null=True)
customer = models.ForeignKey(Customer, models.CASCADE, null=True)
product = models.ForeignKey(Product, models.CASCADE, null=True)
quantity = models.CharField(max_length=30, null=True, )
date_created = models.DateTimeField(auto_now_add=True, null=True)
status = models.CharField(max_length=200, null=True, choices=STATUS, default='Pending')
note = models.CharField(max_length=1000, null=True)
how I can send SMS to shop when order insert by the customer then shop receive SMS that You have new order by customer.name. the product.name in the quantity
customer model
class Customer(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
name = models.CharField(max_length=100, null=True, default='customer')
Phone = models.CharField(null=True, max_length=10)
shop model
class Shop(models.Model):
user = models.OneToOneField(User, null=True, related_name='shop', blank=True, on_delete=models.CASCADE)
name = models.CharField(max_length=70, null=True, default='shop', )
address = models.CharField(max_length=200, null=True)
Phone = models.CharField(null=True, max_length=10)
and my order views.py
def CreateOrder(request, shop_id, product_id):
customer = request.user.customer
shop = Shop.objects.get(id=shop_id)
product = Product.objects.get(id=product_id)
form = OrderForm()
quantity = request.POST.get('quantity')
note = request.POST.get('note')
if request.method == 'POST':
order = Order.objects.create(customer=customer, shop=shop,
product=product, quantity=quantity, note=note)
return redirect('CustomerOrder')
You can use signals in Django for that. Essentially your application will be notified when certain events occur. In your case you can use
post_save, signal will be triggered after a model’ssave()method is called. In Django docs you can check whole list of different types ofsignalsavailable.Inside
receiver, you can use requests to send API call to whatever message service you want to use.NOTE:
post_savesignal will betriggeredwheneversave()method for yourOrdermodel is called. Which will includeupdatingyour model. So depending on your use case you can even create your owncustom signals.Custom signals in Django
Now you have defined your
signalyou need to trigger it whenever you want tosendmessage. IndrfI generally place it insideserializers.pybut you can do it inside yourviews. Here is how you will trigger the signal.views.pyNOTE: For
custom signalsyou need to trigger it whenever you want to use it.