Django custom save insert to multiple table

У меня есть таблица Item и таблица TransactionLog, Когда я создаю элемент, он должен также создавать журнал

вот мой models.py

class Item(models.Model):
itemid = models.CharField(primary_key=True, max_length=20)
name = models.CharField(max_length=100, blank=True, null=True)

class Meta:
managed = False
db_table = 'items'

def save(self, *args, **kwargs):
    TransactionLog.objects.create(itemid=self.cl_itemid,
    trans_desc="Add Clearance Item",
    trans_recorded=timezone.now())
    super(Item, self).save(*args, **kwargs)

class TransactionLog(models.Model):
log_id = models.AutoField(primary_key=True)
itemid = models.ForeignKey('Item', models.DO_NOTHING, db_column='itemid', blank=True, null=True)
trans_desc = models.TextField(blank=True, null=True)
trans_recorded = models.DateField(blank=True, null=True)

class Meta:
    managed = False
    db_table = 'transaction_log'

но когда я пытаюсь вставить, он говорит Невозможно присвоить "'CL-20221106-0000'": "TransactionLog.itemid" должен быть экземпляром "Item". может потому что Item еще не создан?

Мое предложение - использовать сигнал вместо сохранения данных в методе save.

#signals.py
from django.db.models.signals import post_save
from django.dispatch import receiver
from yourapp.models import Item, TransactionLog

@receiver(post_save, sender=Item)
def create_transaction_log(sender, instance, created, **kwargs):
    if created:
       TransactionLog.objects.create(itemid=instance.cl_itemid,
          trans_desc="Add Clearance Item",trans_recorded=timezone.now())
# apps.py
from django.apps import AppConfig

class YourAPPConfig(AppConfig):
    name = 'yourappname'

   def ready(self):
      import yourapp.signals 
Вернуться на верх