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?