首页 > 解决方案 > 防止 m2m_changed 更新父类的修改日期

问题描述

我有一个名为 Outfit 的类,在该类中,一个多对多的关系称为 Products,如下所示:

class Outfit(models.Model):
   products = models.ManyToManyField(Product,
                                  related_name='outfits',
                                  blank=True)
   created = models.DateTimeField(editable=False)
   modified = models.DateTimeField()

   class Meta:
   def save(self, *args, **kwargs):
    ''' On save, update timestamps '''
    if not self.id:
        self.created = timezone.now()
    self.modified = timezone.now()
    return super(Outfit, self).save(*args, **kwargs)

我在 products 模型中有一个名为 product_outfit_count 的变量,它基本上跟踪使用了特定产品的服装数量。保存服装时,会调用此信号:

m2m_changed.connect(update_product_outfit_count,
                sender=Outfit.products.through)

问题是,当产品的服装数量更新时,服装的修改日期也会改变。我怎样才能防止这种情况?

编辑:update_product_count 方法:

def update_product_outfit_count_task(product_ids):
Product = apps.get_model('products.Product')
with transaction.atomic():
    for product in Product.objects.filter(pk__in=product_ids):
        product.outfit_count = product.outfits.count()
        product.save()

标签: djangodjango-models

解决方案


推荐阅读