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'))
이유는 제'save' 메소드를 오버라이드 (override)하지 않고 신호를 사용하여 :
– Fiver첫 번째 post_save를 바꾸는 것이 의미가 있지만 카탈로그 인스턴스가 존재할 때만 카탈로그를 첨부 할 수 있다고 생각합니다. – byrdr