Python Django,在保存模型更改时为ManyToManyField添加值

Python Django,在保存模型更改时为ManyToManyField添加值,python,django,python-2.7,django-signals,Python,Django,Python 2.7,Django Signals,我使用Django 1.7.11。我有模型: #I use django-categories app here class Category(CategoryBase): pass class Advertisment(models.Model): title = models.CharField(max_length=255, blank=True) category = models.ForeignKey(Category, related_name='catego

我使用Django 1.7.11。我有模型:

#I use django-categories app here
class Category(CategoryBase):
   pass

class Advertisment(models.Model):
    title = models.CharField(max_length=255, blank=True)
    category = models.ForeignKey(Category, related_name='category')
    all_categories = models.ManyToManyField(Category, blank=True, related_name='all_categories')
我需要字段“所有类别”包含“类别”及其所有父类别。我尝试使用post_save,但它没有改变任何值。它甚至不改变标题字段。当我通过管理界面创建模型并使用自定义表单时,它不起作用

@receiver(post_save, sender=Advertisment, dispatch_uid="update_stock_count")
def update_stock(sender, instance, **kwargs):     
 categ = instance.category     
 instance.all_categories.add(categ)          
 for parent in categ.get_ancestors():
            if parent not in instance.all_categories.all():
                     instance.all_categories.add(parent)

m2m_更改也没有帮助,因为ManyToManyField为空且没有更改。如何将值从ForeignKey添加到多个字段?我应该怎么做才能使它在管理界面中工作。

我找到了解决方案。在admin类中,需要添加一个函数save_模型,如下所示:

class AdvertismentAdmin(admin.ModelAdmin):
   def save_model(self, request, obj, form, change):                   
      if obj.category:
        category_list=[]
        category = obj.category
        category_list.append(category)
        for parent in category.get_ancestors():
            if parent not in category_list:
                category_list.append(parent)
        form.cleaned_data['all_categories'] = category_list            
        super(AdvertismentAdmin, self).save_model(request, obj, form, change)

您的
post\u save
是否被调用过?是的,现在我注意到它在自定义表单中运行良好,在管理界面中不起作用。我可以用管理员表单做什么?)