django的manytomanyfield。新增()方法(django manytomanyfie

2019-07-03 17:43发布

假设我有:

class Album(models.Model):
    photos = models.ManyToManyField('myapp.Photo')
    photo_count = models.IntegerField(default = 0)

class Photo(models.Model):
    photo = models.ImageField(upload_to = 'blahblah')

什么是想要的是,每次我打电话。新增()方法,递增photo_countAlbum类,所以我想重写。新增()方法。 的问题是,我无法导入.add()的类,因为它是在一个方法中,所以它像def->class->def 。 所以,反正是有覆盖.add() 或者有更好的方式来做到这一点?

Answer 1:

你可以使用Django的信号和写信号处理程序将使用递增计数器m2m_changed信号:

https://docs.djangoproject.com/en/dev/ref/signals/#m2m-changed



Answer 2:

也许最简单的选择是跳过信号,完全省略了PHOTO_COUNT场和调用[相册] .photos.count()的任何地方,你会使用[相册] .photo_count。

如下您也可以定义在专辑的属性:

class Album(models.Model):
    photos = models.ManyToManyField('myapp.Photo')

    @property
    def photo_count(self):
        return self.photos.count()

class Photo(models.Model):
    photo = models.ImageField(upload_to = 'blahblah')

这两个选项的缺点是,他们就更难排序依据的照片数量搜索/。 他们也并不存储在数据库中的计数。 (如果你有与同一数据库交互的一些非Django应用这可能是进口)。如果你认为你会想通过Django的做那些五花八门的搜索,看看Django的注解 。

这是不是处理的信号简单,但可能仍然矫枉过正。



文章来源: django manytomanyfield .add() method