Автоматически создавать дочерний объект от родителя - Django 1.11 - PullRequest
0 голосов
/ 12 марта 2019

У меня есть родительский класс:

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

И дочерний:

class Child1(Parent):
    pass

Есть ли возможный способ создания дочернего объекта при каждом сохранении perent?

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

Есть идеи?

Ответы [ 2 ]

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

Мне интересно, подойдет ли вам что-то подобное:

class Child1(Parent):
    class Meta:
        db_table = 'whateverappparentisin_parent'
        managed = False

Я не уверен, что Django будет делать с этим, но идея в том, что вы получите модель с точно такими же полями, подкрепленную той же таблицей базы данных (так что все остальное, например, удаление в Parent, также будет немедленно "видимым" "на Child1), без Django, желающего сделать миграции для него.

Но я не знаю, разрешено ли это.

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

Вы можете использовать сигналы или вы можете переопределить сохранить метод Родитель модель, чтобы сделать это.

@receiver(models.signals.post_save, sender=Parent)
def post_parent_save(sender, instance, created, *args, **kwargs):
    # Create child here

Или,

class Parent(models.Model):
    def save(self, *args, **kwargs):
        super(Parent, self).save(*args, **kwargs)
        # Create child here

В обоих вариантах, если вы хотите создать дочернего элемента только тогда, когда родитель создан (не обновлен ), вам необходимо добавить дополнительный логин.Для сигналов вы можете использовать созданный параметр, для переопределения метода сохранения вам нужно проверить, есть ли у экземпляра модели поле id, прежде чем вызывать метод супер сохранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...