Lorsque l'utilisateur crée un produit, plusieurs actions doivent être effectuées dans la méthode save()
avant d'appeler super(Product,self).save(*args,**kwargs)
.Dois-je préférer un signal général plutôt que plusieurs signaux spécifiques?
Je ne suis pas sûr si je devrais utiliser un seul signal pre_save
pour faire toutes ces actions ou il est préférable de créer un signal pour chacune de ces actions séparément.
exemple simple (je vais remplacer par des signaux save
overrides):
class Product(..):
def save(...):
if not self.pk:
if not self.category:
self.category = Category.get_default()
if not self.brand:
self.brand = 'NA'
super(Product,self).save(*args,**kwargs)
...
SO
@receiver(pre_save,sender=Product)
def set_attrs(instance,**kwargs):
if kwargs['created']:
instance.category = Category.get_default()
instance.brand = 'NA'
OU
@receiver(pre_save,sender=Product)
def set_category(instance,**kwargs):
if kwargs['created']:
instance.category = Category.get_default()
@receiver(pre_save,sender=Product)
def set_brand(instance,**kwargs):
if kwargs['created']:
instance.brand = 'NA'
Cette est juste un exemple simple. Dans ce cas, le set_attrs
général devrait être assez probablement, mais il y a des situations plus complexes avec différentes actions comme la création userprofile
pour user
puis userplan
etc.
Y at-il meilleur conseil pratique pour cela? Tes opinions?
Je dirais que pour maintenabilité il serait préférable de les séparer. Mais j'essaie généralement d'éviter d'utiliser des signaux et d'utiliser plutôt des méthodes de gestion, etc. –