2014-02-07 67 views
4

当我们通过models.pyforms.py创建另一个对象时,是否可以创建对象?Django创建对象

models.py

class Study(models.Model): 
    nameS= models.CharField(max_length=40) 
def __init__(self): 
    System.create(Study=self) 

class System(models.Model): 
    Name= models.TextField(max_length=25) 
    Study= models.OneToOneField(Study) 
+0

好,每次都将创建一个新的系统,你* *实例化一个测试对象,其中包括获取现有的从数据库中,这是不大概什么你要。但我不认为我明白你真正想要做什么。 –

回答

4

试试这个,它应该创建系统对象只有一次,测试对象创建期间:

class Test(models.Model): 
    nameS= models.CharField(max_length=40) 
    def save(self, *args, **kwargs): 
     if not self.pk: # the object doesn't have PK until the very first save 
      super(Test, self).save(*args, **kwargs) 
      Test2.objects.create(test=self) 
     else: 
      super(Test, self).save(*args, **kwargs) 

您可能需要填充field1领域也是如此,因为它不能根据您当前的设置为空。

+0

对不起,我在代码中看到一个错误,现在没关系(它不是“System.create(Study = self)”,而是“Test2.create(Study = self)” 好吧,我是我会尝试你的代码 – Raphael

+0

编辑我的答案但它不是最重要的部分。保存方法覆盖的想法是你需要在django学习过程中很早就掌握的东西 – gwaramadze

+0

我有一个错误,''研究'是一个无效的关键字参数为这个功能“ – Raphael

1

您可以使用pre_save信号:

# models.py 
from django.db.models import pre_save 
from django.dispatch import receiver 

@receiver(pre_save, sender=Study) 
def system_creator(**kwargs): 
    created = kwargs.get('created') 
    # flag `True` if object created now 
    if created: 
     study = kwargs.get('instance') 
     test = Test.objects.create(Study=study,...)