2014-11-01 3 views
1

카탈로그 모델과 OnetoOne 관계가있는 기사 모델이 있습니다.Django 신호 post_save 업데이트

내 현재 기능에 Article 모델이 있습니다. post_save에 동일한 이름의 카탈로그 모델을 만듭니다. 제 FK 기사가 null에서 현재 사용 가능한 동일한 이름의 카탈로그 인스턴스로 업데이트하는 기능을 수행하고 싶습니다. 위의 코드가 제대로 작동

class Catalog(models.Model): 
    name = models.CharField(max_length=100) 
    price = models.IntegerField() 

    def __unicode__(self): 
     return self.name 

class Article(models.Model): 
    catalog = models.OneToOneField(Catalog, related_name='article_products', blank=True, null=True) 
    title = models.CharField(max_length=200) 

    def __unicode__(self): 
     return unicode(self.title) 

@receiver(post_save, sender=Article) 
def create_catalog(sender, **kwargs): 
    if kwargs.get('created', False): 
     Catalog.objects.get_or_create(name=kwargs.get('instance'), price='10') 

: 여기

는 내가 지금까지 가지고있는 것입니다. Article 모델 인스턴스가 생성되면 동일한 이름의 Catalog 인스턴스가 만들어집니다. 이제 새로 생성 된 Article을 FK 관계로 새로 작성한 Catalog 인스턴스로 업데이트하고 싶습니다. 나는 내 논리가 비슷하다고 생각하지만 작동시키지 못한다.

@receiver(post_save, sender=Catalog) 
def attach_catalog(sender, **kwargs): 
    if kwargs.get('created', False): 
     b = Article.objects.latest('id') 
     Article.objects.filter(pk=b.id).update(catalog=kwargs.get('instance')) 
+0

이유는 제'save' 메소드를 오버라이드 (override)하지 않고 신호를 사용하여 :

@receiver(post_save, sender=Catalog) def attach_catalog(sender, **kwargs): if kwargs.get('created', False): Article.objects.latest('id').update(catalog=kwargs.get('instance')) 
Fiver

+0

첫 번째 post_save를 바꾸는 것이 의미가 있지만 카탈로그 인스턴스가 존재할 때만 카탈로그를 첨부 할 수 있다고 생각합니다. – byrdr

답변

5

는 나는 다음과 같은 작업을 얻을 수 있었다? 새 카탈로그에 대해 관련 카탈로그가 자동 생성되므로 재정의 된 save 메소드로 새 카탈로그를 작성하고 동시에 관계를 채울 수 있습니다.