2011-04-14 3 views
3

M2M이 저장되도록 객체를 저장하려고합니다. 그런 다음 몇 가지 계산을 수행하고 저장된 객체에 필드를 설정하기 위해 M2M 필드를 읽고 싶습니다.save()에서 새로 생성 된 객체의 ID 얻기

class Item(models.Model): 
    name = models.CharField(max_length=20, unique=True) 
    product = models.ManyToManyField(SomeOtherModel, through='SomeTable') 

    def save(self, *args, **kwargs): 
     super(Item, self).save(*args, **kwargs) 
     m2m_items = SomeTable.objects.filter(item = self) 
     # DO SOME STUFF WITH THE M2M ITEMS 

m2m_items가 표시되지 않습니다. 이걸 얻을 수있는 방법이 있습니까?

답변

4

여기에 혼란이 있습니다.

super을 호출하면 self.id에 값이 생깁니다.

그러나 귀하의 filter 전화의 요지를 이해하지 못합니다. 처음에는 필터가 하나의 인스턴스가 아니라 쿼리 세트를 얻으므로 이 아니라 filter을 의미합니다. 그러나 그렇더라도 호출은 무의미합니다 : 만 저장하면이 저장되므로 데이터베이스에서 되돌아 오는 것은 정확히 동일합니다. 점은 무엇인가?

질문 업데이트 후 편집 확인해 주셔서 감사합니다. 그러나 모델의 save() 메서드는 M2M 항목에 대해 아무런 작업을 수행하지 않습니다. 그들은 별도로 구원 받아야합니다. 이것은 폼이나 뷰의 작업입니다.

+0

죄송합니다. 내 정보가 잘못되었습니다. 나는 내 질문을 다시 썼다. 내가하는 일은 many2many 아이템을 얻으려고 노력하는 것입니다. 그러나 어떤 이유에서든 그들이 나타나지 않을 것입니다. – Stephan

+0

답장을 보내 주셔서 감사합니다. 이제 m2m_changed 신호를 사용하려고합니다. models.signals.m2m_changed.connect (set_total_price, sender = Deal.product.through) 어떤 이유로 든 내 set_total_price 메소드를 호출하지 않습니다. 그것은 post_save 신호와 함께 작동 ... 아 글쎄, 나는 다시 시도 할 몇 가지있어. 고마워. – Stephan

+0

추가 정보 : save_formset에서 인스턴스를 반복하여 M2M을 읽었습니다. 그런 다음 저장된 항목을 불러와 새로운 값으로 저장했습니다. – Stephan

관련 문제