Django Сохранение данных одной формы в несколько таблиц

У меня есть модель планов с набором атрибутов, есть форма для заполнения/редактирования планов под эту модель. Также есть модель истории планов, в которую я хочу подгружать новыми строками все изменения, которые происходят с основной таблицей планов.

Как я могу это сделать?

Вот models.py:

class BasePlan(models.Model):
    """Создаем абстрактную таблицу с полями, которую будем наследовать в планах и истории планов"""
    MONTH = [
        ['Янв', 'Январь'],
        ['Фев', 'Февраль'],
        ['Мар', 'Март'],
        ['Апр', 'Апрель'],
        ['Май', 'Май'],
        ['Июн', 'Июнь'],
        ['Июл', 'Июль'],
        ['Авг', 'Август'],
        ['Сен', 'Сентябрь'],
        ['Окт', 'Октябрь'],
        ['Ноя', 'Ноябрь'],
        ['Дек', 'Декабрь']
    ]
    YEAR_CHOICES = [
        (r, r) for r in range(2015, datetime.date.today().year + 5)
    ]
    business_group = models.CharField(max_length=100, verbose_name='Бизнес-группа')
    rc = models.CharField(max_length=35, verbose_name='РЦ')
    filial = models.CharField(max_length=35, verbose_name='Филиал')
    insert_date = models.DateTimeField(auto_now_add=True, verbose_name='Дата ввода плана')
    is_active = models.BooleanField(verbose_name="Актуальность плана")
    create_user = models.CharField(max_length=20, verbose_name="Пользователь, создавший план")
    month = models.CharField(max_length=10, choices=MONTH, default='january', verbose_name="Месяц плана")
    year = models.IntegerField(verbose_name="Год плана", choices=YEAR_CHOICES, default=datetime.datetime.now().year)
    plan_value_bs = models.DecimalField(blank=True, null=True, max_digits=15, decimal_places=2,
                                        verbose_name='Значение плана БС')
    plan_value_kz = models.DecimalField(blank=True, null=True, max_digits=5, decimal_places=2,
                                        verbose_name='Значение плана КЗ')

    class Meta:
        abstract = True


class Plan(BasePlan):
    """Создаем планы"""
    class Meta:
        verbose_name = 'План'
        verbose_name_plural = 'Планы'


class Plan_history(BasePlan):
    """Создаем историю изменения планов"""
    plan = models.ForeignKey(to='Plan', on_delete=models.PROTECT)
    reason = models.CharField(max_length=100, verbose_name='Причина изменения')

    class Meta:
        verbose_name = 'Версия планов'
        verbose_name_plural = 'Версии планов'

Вот views.py:

def plan_input(request):
    form = PlanForm(request.POST or None)
    context = {
        'form': form,
        'sent': request.GET.get('sent', False)
    }
    if request.method == 'POST':
        if form.is_valid():
            response = form.save(commit=False)
            response.create_user = request.user
            form.save()
            return HttpResponseRedirect('{}?sent=True'.format(request.path))

    return render(request, 'plan_input.html', context)

def plan_edit(request, plan_id):
    form = PlanForm(instance=Plan.objects.get(id=plan_id))
    context = {
        'form': form,
        'sent': request.GET.get('sent', False)
    }
    if request.method == 'POST':
        form = PlanForm(request.POST, instance=Plan.objects.get(id=plan_id))
        if form.is_valid():
            response = form.save(commit=False)
            response.create_user = str(request.user)
            form.save()
            return HttpResponseRedirect('{}?sent=True'.format(request.path))

    return render(request, 'plan_edit.html', context)

Вот forms.py:

class PlanForm(forms.ModelForm):
    class Meta:
        model = Plan
        fields = ('business_group', 'rc', 'filial', 'is_active', 'month', 'year', 'plan_value_bs', 'plan_value_kz',)
        widgets = {'create_user': forms.HiddenInput()}

Как именно мне правильно реализовать сохранение в модели Plan_history Всех изменений, которые происходят в модели Plan?

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