Django 从另一个模型保存方法创建模型实例

byr*_*rdr 3 django django-models

我有一个文章模型,它与目录模型具有一对一的关系。是否可以从文章的保存方法中创建目录实例。我想附加一篇带有同名目录的文章,同时创建它们是最简单的。

这是我的目录类:

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

    def __unicode__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

文章类别:

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)
Run Code Online (Sandbox Code Playgroud)

我想要在保存方法中使用一些与此类似的逻辑:但我不确定是否可能

cat = Catalog.create(title = self.title)
      cat.save()
Run Code Online (Sandbox Code Playgroud)

kar*_*ikr 5

您可以在创建文章对象时使用post_save信号来创建目录对象。这将确保创建目录对象,而不必在文章模型的保存方法中包含不相关的代码。

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)
Run Code Online (Sandbox Code Playgroud)