2017-03-05 43 views
0

我有一個post_save功能如何判斷一個django RelatedManager.add()是否發現該對象已被添加?

@receiver(post_save) 
def update_parent_location(sender, instance=None, created=False, **kwargs): 
list_of_models = ('A', 'B', 'C') 

if sender.__name__ in list_of_models: 
    groups = instance.group_set.all() 
    fields_to_update = tuple(field.lower() for field in list_of_models) 

    for field in fields_to_update: 
     parent = getattr(instance, field, None) 
     if parent is not None: 
      parent.groups.add(*groups) 
      parent.save() 

我怎麼會知道,如果

parent.groups.add(*groups) 

部分實際上增加了一個新的對象或默默失敗下面的代碼?

回答

1

你可以查詢組之前和之後數,看看是否有什麼改變:

... 
num_groups = parent.groups.count() 
parent.groups.add(*groups) 
if parent.groups.count() > num_groups: 
    # Something was added 
    parent.save() 
... 
+0

感謝。這應該工作。我原以爲有內置的方法可以做到這一點。 –

相關問題