2012-11-10 54 views
4

假設我有:Django的manytomanyfield。新增()方法

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()方法。問題是,我不能導入.add()的類,因爲它在方法中,所以它就像def->class->def。那麼無論如何要重寫.add()?或者有更好的方法來做到這一點?

回答

0

也許最簡單的選擇是跳過信號,完全省略了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 annotations

這比處理信號簡單,但可能仍然是矯枉過正。