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)
Вернуться на верх