Creating a Django Object

Is it possible to create an object when creating another object with models.pyor forms.py?

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)
+4
source share
2 answers

Try this, it should create the System object only once, during the creation of the test object:

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)

You may need to fill in the field field1because it cannot be NULL according to your current setting.

+4
source

You can use the signal 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,...)
+1
source

Source: https://habr.com/ru/post/1525756/


All Articles