Django сохраняет дочерний элемент из родительского

У меня есть этот код, который работает нормально:

class Model1(models.Model):
    name = models.CharField(max_length=50)
    type = models.CharField(max_length=50)    

    class Meta:
        verbose_name_plural = "Model1s"
        ordering = ('sioticket',)

    def def save(self, *args, **kwargs):
        super(Model1, self).save(*args, **kwargs)

class Model2(models.Model):
    name = models.ForeignKey(Model1, on_delete=models.CASCADE, null=True, blank=True)
    cpm = models.CharField(max_length=50)

    class Meta:
        verbose_name_plural = "Model2s"
        ordering = ('sioticket',)
    
    def save(self, *args, **kwargs):
        vartype = self.name.type
        self.cpm = vartype
        return super(Model2, self).save(*args, **kwargs)

Мне нужно выполнить save() Model2 из save() Model1. Или, из save() модели 1, выполните:

vartype = self.name.type
self.cpm = tipo

Но проблема в том, что в родителях я не знаю, можно ли получить доступ к save() его дочерних классов или как изменить значения его дочерних классов из родителей save.

Также я должен сказать, что, если я создаю новую Модель1 и Модель2, все работает нормально, но если я обновляю тип из Модели1, он не копируется в "cmp" Модели2.

Я пробовал следующее:

class Model1(models.Model):
    name = models.CharField(max_length=50)
    type = models.CharField(max_length=50)

    class Meta:
        verbose_name_plural = "Model1s"
        ordering = ('sioticket',)

    def def save(self, *args, **kwargs):
        super(Model1, self).save(*args, **kwargs)
        children = self.objects.all()
        for child in children:
            if child._meta.verbose_name_plural=="Model2s":
                child.save()

class Model2(models.Model):
    name = models.ForeignKey(Model1, on_delete=models.CASCADE, null=True, blank=True)
    cpm = models.CharField(max_length=50)

    class Meta:
        verbose_name_plural = "Model2s"
        ordering = ('sioticket',)
    
    def save(self, *args, **kwargs):
        tipo = self.name.type
        self.cpm = tipo
        return super(Model2, self).save(*args, **kwargs)

Обратите внимание, что:

children = self.objects.all()
for child in children:
   if child._meta.verbose_name_plural=="Model2s":
        child.save()

Но у меня следующая ошибка:

Manager isn't accessible via Model1 instances

Я новичок в Django и буду благодарен за помощь.

В конце я самостоятельно нашел решение.

Решением было:

for obj in Model1.objects.all():
   for i in obj.model2_set.all():
       i.save()

Спасибо всем!

Вернуться на верх