Django - Как получить экземпляр self.id при создании нового объекта
Я работаю с двумя классами, когда я сохраняю первый, он автоматически создает другой, поле под названием "transaction" должно быть заполнено self.id.
Но я получаю сообщение об ошибке:
NOT NULL constraint failed: portfolios_portfoliotoken.transaction_id
вот код, который я использую:
PortfolioToken.objects.create(transaction=self.id, portfolio=self.portfolio, date=self.date, total_today_brl=self.total_cost_brl+last.total_today_brl, order_value=self.total_cost_brl)
Более подробную информацию можно посмотреть ниже:
class Transaction(models.Model):
id = models.AutoField(primary_key=True)
date = models.DateField(("Date"), default=date.today)
portfolio = models.ForeignKey(Portfolio, on_delete=models.CASCADE, default=1)
total_cost_brl = models.FloatField(editable=False)
...
def save(self, *args, **kwargs):
self.share_cost_brl = round(self.share_cost_brl, 2)
self.total_cost_brl = round(self.shares_amount * self.share_cost_brl, 2)
...
PortfolioToken.objects.create(transaction=self.id, portfolio=self.portfolio, date=self.date, total_today_brl=self.total_cost_brl+last.total_today_brl, order_value=self.total_cost_brl)
super(Transaction, self).save(*args, **kwargs)
class PortfolioToken(models.Model):
portfolio = models.ForeignKey(Portfolio, on_delete=models.CASCADE, default=1)
transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE)
total_today_brl = models.FloatField()
order_value = models.FloatField()
date = models.DateField(("Date"), default=date.today)
...
Вам следует сначала вызвать super().save(*args, **kwargs) для сохранения транзакции, а затем вы можете использовать это для построения PortfolioToken:
class Transaction(models.Model):
# …
def save(self, *args, **kwargs):
# …
super().save(*args, **kwargs)
PortfolioToken.objects.create(
transaction_id=self.id,
portfolio=self.portfolio,
date=self.date,
total_today_brl=self.total_cost_brl+last.total_today_brl,
order_value=self.total_cost_brl
)