Django,在保存模型更改时向 ManyToManyField 添加值
Django, Add value to ManyToManyField when save changes of the model
我使用 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')
我需要字段 "all_categories" 包含 "category" 及其所有 parent 类别。我尝试使用 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_changed 也无济于事,因为 ManyToManyField 是空的并且没有变化。如何将 ForeignKey 中的值添加到 ManyToMany 字段?我应该怎么做才能在管理界面中正常工作。
我找到了解决办法。在管理中 class 需要添加一个函数 save_model 像这样:
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)
我使用 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')
我需要字段 "all_categories" 包含 "category" 及其所有 parent 类别。我尝试使用 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_changed 也无济于事,因为 ManyToManyField 是空的并且没有变化。如何将 ForeignKey 中的值添加到 ManyToMany 字段?我应该怎么做才能在管理界面中正常工作。
我找到了解决办法。在管理中 class 需要添加一个函数 save_model 像这样:
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)