Сохранение тех же данных из родительской модели в детей - Django 1.11 - PullRequest
1 голос
/ 11 марта 2019

Я немного озадачен этим, я, похоже, не могу найти точного ответа на эту проблему, не уверен, какой подход будет более безопасным для этого.

У меня есть родительская модель и 2 дочерние модели, я использую формы django, я хочу заполнить 2 дочерние модели всякий раз, когда родителем является поле, я имею в виду, что они выглядят так:

class Parent(models.Model):
    field1 = models.CharField()
    field2 = models.CharField()
    field3 = models.CharField()

class Child1(Parent):
    pass

class Child2(Parent):
    pass

Поскольку я не хочу / не хочу создавать новые поля в дочерних классах, все будет наследоваться от родительского, я могу без проблем использовать родительские поля в admin или формах.

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

Есть идеи, как этого добиться?

1 Ответ

1 голос
/ 11 марта 2019

Простое решение - переопределить метод save, например:

from django.db import models
from django.forms import model_to_dict

class Parent(models.Model):
    field1 = models.CharField(max_length=5)
    field2 = models.CharField(max_length=5)
    field3 = models.CharField(max_length=5)

    def save(self, *args, **kwargs):
        if not self.pk and self.__class__.__name__ == 'Parent':
            Child1.objects.create(**model_to_dict(self))
            Child2.objects.create(**model_to_dict(self))
        super().save(*args, **kwargs)

, но вы должны понимать, что после выполнения такого кода вы получите тройные экземпляры внутри родительской модели:

for _ in range(4): 
    Parent.objects.create(field1='dsad', field2='aa', field3='dd')

и:

Child1.objects.count()
4
Child2.objects.count()
4

но

Parent.objects.count()
12
...