2014-11-01 124 views
1

我有一個文章模型,它與Catalog模型具有OnetoOne關係。是否可以從文章的保存方法中創建Catalog的實例?我想用同名的目錄附上文章,最簡單的做法是同時創建這些文章。Django從另一個模型保存方法創建模型的實例

這裏是我的目錄類:

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) 
    abstract = models.TextField(max_length=1000, blank=True) 
    full_text = models.TextField(blank=True) 
    proquest_link = models.CharField(max_length=200, blank=True, null=True) 
    ebsco_link = models.CharField(max_length=200, blank=True, null=True) 

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


    def save(self, *args, **kwargs): 
     self.full_text = self.title 
     super(Article, self).save(*args, **kwargs) 

我想保存方法中類似這樣的一些邏輯:我不知道這是否是可能的雖然

cat = Catalog.create(title = self.title) 
     cat.save() 

回答

1

你可以改爲使用post_save signal在創建時創建目錄對象物品的離子。這將確保創建目錄對象,而不必在文章模型的保存方法中包含不相關的代碼。

from django.db.models.signals import post_save 

# method for updating 
def create_catalog(sender, instance, created, **kwargs): 
    if instance and created: 
     #create article object, and associate 


post_save.connect(create_catalog, sender=Article) 
+0

我用了一個稍微不同的方法,但這讓我走上了正確的軌道。謝謝 @receiver(post_save,sender = Article) def create_catalog(sender,** kwargs): if kwargs.get('created',False): Catalog.objects.get_or_create(name = kwargs.get('instance '),價格= '10') – byrdr 2014-11-01 13:31:43

相關問題