ユーザーが製品を作成する場合、super(Product,self).save(*args,**kwargs)
を呼び出す前に、複数のアクションをsave()
メソッドで実行する必要があります。複数の特定のシグナルではなく、1つの一般的なシグナルを好むべきですか?
pre_save
信号を1つだけ使用してこれらのすべての動作を実行する必要があるかどうか、またはこれらの動作ごとに個別に信号を作成する方が良いかどうかはわかりません。
簡単な例は、(私は信号によってsave
オーバーライドを交換するつもりです):
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'
OR
@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'
この単純な例です。この場合、一般的なset_attrs
は、おそらく十分なはずですが、user
ためuserprofile
を作成するなどの異なるアクションを持つ、より複雑な状況があり、その後、userplan
など
このためのいくつかのベストプラクティスのアドバイスはありますか?あなたの意見ですか? 1つのモデルのインスタンス上のアクションが別のモデルに影響を与える場合は、単に事実を出し
私は保守のために、それらを分割する方が良いだろうと言うでしょう。しかし、私は一般的にシグナルを使用しないようにし、マネージャメソッドなどを使用します。 –