2017-03-09 77 views
1

鑑於以下模型進行建模,與已經創建四個實例(A,B,C,d)欲觸發鉤,當我一個公司添加到實例D.觸發信號時添加相對於

class Foo(models.Model): 
     name = models.CharField() 
     description = models.TextField() 
     company = models.ManyToManyField(Company) 

我想過使用post_save信號,但我不確定這是否是一種好方法。

+0

我的錯誤,我更新了我的答案! –

回答

1

對不起,我的壞。我誤解你的問題。如果您想要處理m2m字段的保存,最佳做法是使用m2m_changed信號。

一般來說,使用信號是一種很好的做法。這是他們創造的原因之一!

@receiver(m2m_changed, sender=Foo.company.through) 
def handler(sender, instance, pk_set, action, **kwargs): 
    if instance.name == 'D' and action == 'post_add' and instance.company is not None: 
     ... 
0

嘗試使用內置預保存信號。這樣,您可以獲取D實例並檢查'公司'字段是否即將更改。然後添加一個鉤子。

@receiver(pre_save, sender=Foo) 
def foo_pre_save(sender, instance, **kwargs): 
    try: 
     foo = Foo.objects.get(name=D_name) 
     if((foo.company == None) and (instance.company != None)): 
      # do your hook here 
    except Foo.DoesNotExist: 
     # handle exception