django manytomanyfield .add() method



假设我有:

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')

想要的是,每次我调用.add()方法时,请在Album类上递增photo_count,因此我想覆盖.add()方法。问题是,我无法导入.add()的类,因为它在方法内部,因此就像def->class->def一样。那么是否有覆盖.add()?还是有更好的方法?

您可以使用django的信号并编写一个信号处理程序,该信号处理程序将使用m2m_changed信号递增计数器:

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

可能最简单的选项是跳过信号,完全删除photo_count字段,然后调用[permains.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')

这两个选项的缺点是它们使基于照片数量的搜索/排序更加困难。他们也不会将计数存储在数据库中。(如果您有一些与同一DB进行交互的非Django应用程序,则可能是导入的。)如果您认为您想通过Django进行此类搜索,请查看Django注释。

这比处理信号要简单,但可能仍然过度杀伤。

相关内容

  • 没有找到相关文章

最新更新