假设我有:
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_count
的Album
类,所以我想重写。新增()方法。 的问题是,我无法导入.add()
的类,因为它是在一个方法中,所以它像def->class->def
。 所以,反正是有覆盖.add()
或者有更好的方式来做到这一点?
你可以使用Django的信号和写信号处理程序将使用递增计数器m2m_changed
信号:
https://docs.djangoproject.com/en/dev/ref/signals/#m2m-changed
也许最简单的选择是跳过信号,完全省略了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的注解 。
这是不是处理的信号简单,但可能仍然矫枉过正。