Alex
Alex

Reputation: 17

How should I connect Signals to my Model correctly In Django app?

I tried to connect Signals 'post_save' method to this Order model in my Django app:

from django.conf import settings
from django.db import models

from CFTrade.models import Item

    class Order(models.Model):
        user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='order_user')
        full_name = models.CharField(max_length=50)
        address1 = models.CharField(max_length=250)
        address2 = models.CharField(max_length=250)
        city = models.CharField(max_length=100)
        phone = models.CharField(max_length=100)
        post_code = models.CharField(max_length=20)
        created = models.DateTimeField(auto_now_add=True)
        edited = models.DateTimeField(auto_now=True)
        total_paid = models.DecimalField(max_digits=7, decimal_places=2)
        order_key = models.CharField(max_length=200)
        billing_status = models.BooleanField(default=False)
    
        class Meta:
            ordering = ('-created',)
        
        def __str__(self):
            return str(self.created)

And also Imported the signal receiver module: In my app's apps.py file,

from django.apps import AppConfig


class OrdersConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'orders'

    def ready(self):
        import orders.signals

In my Model handler I don't receive what I need from model, including billing_status and created `

from django.db.models.signals import post_save
from django.dispatch import receiver
from orders.models import Order


@receiver(post_save, sender=Order)
def inventory_handler(sender, instance, created, *args, **kwargs):
    print('First step')
    print(args, kwargs)`

Here is what I get: First step () {'signal': <django.db.models.signals.ModelSignal object at 0x0000026212438590>, 'update_fields': None, 'raw': False, 'using': 'default'} How should I fix this?

Upvotes: 1

Views: 87

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 477180

It is in the instance, so:

@receiver(post_save, sender=Order)
def inventory_handler(sender, instance, created, *args, **kwargs):
    print('First step')
    print(instance.billing_status)
    print(created)

the args and kwargs here only catch the other parameters, that are thus not sender, instance and created.

Upvotes: 0

Related Questions