Django как сохранить данные в нескольких таблицах
У меня есть функция PostgreSQL, которая сохраняет данные в items и items_transactionlog, я удалил некоторые строки, чтобы их было легче читать.
INSERT INTO public.items
(remarks,resolution,record_date,resolve)
VALUES (f_remarks,f_resolution,now(),false);
INSERT INTO public.items_transactionlog (trans_desc,trans_recorded)
VALUES ('Add Clearance Item',now());
Я хочу использовать эту функцию через мой models.py, возможно ли настроить мой models.py так, чтобы каждый раз, когда я сохраняю элемент, он также сохранялся в transactionlog
Я использую inspectdb и добавляю следующие модели в мое приложение
class Items(models.Model):
itemid = models.CharField(primary_key=True, max_length=20)
remarks = models.TextField(blank=True, null=True)
resolution = models.TextField(blank=True, null=True)
resolve = models.BooleanField(blank=True, null=True)
resolve_date = models.DateField(blank=True, null=True)
resolve_by = models.CharField(max_length=8, blank=True, null=True)
recorded_by = models.CharField(max_length=8, blank=True, null=True)
record_date = models.DateField(blank=True, null=True)
class Meta:
managed = False
db_table = 'items'
class ItemsTransactionLog(models.Model):
log_id = models.AutoField(primary_key=True)
trans_desc = models.TextField(blank=True, null=True)
trans_recorded = models.DateField(blank=True, null=True)
class Meta:
managed = False
db_table = 'items_transactionlog'
Конечно, вы можете переопределить функцию save() вашей модели, чтобы она создавала журнал при каждом сохранении. Вы можете добавить условную логику, если вам не нужен новый элемент журнала каждый раз (например, если вы хотите, чтобы он создавался только при первом сохранении, вы можете проверить существование self.id)
#import the timezone utils for now()
from django.utils import timezone
class Items(models.Model):
...
class Meta:
managed = False
def save():
"""Override the default save to create transaction log"""
ItemsTransactions.objects.create(
trans_desc = "Your description",
trans_recorded = timezone.now()
)
#now do the actual saving
super(Items, self).save(*args, **kwargs)