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