2012-11-10 2 views
4

한다고 가정 내가 가진 :장고 manytomanyfield .add() 메소드

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 호출 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가 아닌 동일한 DB와 상호 작용하는 응용 프로그램을 가지고 있다면 가져올 수 있습니다.) Django를 통해 이러한 종류의 검색을 수행 할 생각이라면 Django annotations을 참조하십시오.

이것은 신호 처리보다 간단하지만 과도한 공격 일 수 있습니다.

관련 문제