2014-11-01 115 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

相关问题