Я пытаюсь загрузить некоторые данные тестирования в приложение, используя опцию миграций. Все данные хранятся в файле .Yaml в приложении, и у меня есть несколько других миграций, которые отлично работают, загружая все данные.
Но у этого есть проблема.В этой модели (Транзакции) я создал 3 самописных поля, которые вычисляются при вызове метода save ().Этот процесс работает отлично, когда я отправил данные через представление.Но когда я отправляю его через миграцию, происходит сбой, как будто метод сохранения не перезаписывается.Я не знаю, что делать, чтобы выполнить загрузку как миграцию.
Миграция
from django.db import migrations
from django.core import serializers
def transactions(apps, schema_editor):
with open('fixtures/transactions.yaml') as trans:
for obj in serializers.deserialize("yaml", trans):
t=apps.get_model("acounts", "Transactions")()
cat=apps.get_model("acounts","Category")
.objects.get(pk=obj.object.category.pk)
cuen=apps.get_model("acounts", "Acount").objects.get(pk=obj.object.acount.pk)
print(obj)
t.tipo=obj.object.tipo
t.description=obj.object.description
t.monto=obj.object.monto
t.date=obj.object.date
# t.category=obj.object.category
t.category=cat
# t.acount=obj.object.acount
t.acount=cuen
t.save()
class Migration(migrations.Migration):
dependencies = [
('acounts', '0002_populate_acounts'),
]
operations = [
(migrations.RunPython(transactions))
]
Модель
class Transactions(models.Model):
TYPE_CHOICES = (
('GASTO', 'Gasto'),
('INGRESO', 'Ingreso'),
)
tipo = models.CharField(
choices=TYPE_CHOICES,
max_length=20
)
description=models.CharField(max_length=100)
monto=models.DecimalField(max_digits=25,
decimal_places=2,
null=False)
category=models.ForeignKey('Category',
on_delete=models.CASCADE,
null=False)
acount=models.ForeignKey('Acount',
on_delete=models.CASCADE,
null=False)
date=models.DateField()
total_USD=models.DecimalField(
max_digits=25,
decimal_places=2,
editable=False);
total_BTC=models.DecimalField(
max_digits=25,
decimal_places=9,
editable=False);
total_BSS=models.DecimalField(
max_digits=25,
decimal_places=2,
editable=False);
total_EUR=models.DecimalField(
max_digits=25,
decimal_places=2,
editable=False);
created_at=models.DateTimeField(
auto_now_add=True,
editable=False)
updated_at=models.DateTimeField(
auto_now=True,
editable=False)
def save(self):
cotizations=Currency.objects.all()
currency=self.acount.currency.name
in_usd=self.monto/Currency.objects.get(name=currency).price_USD_now
query_btc=in_usd*Currency.objects.get(name='BTC').price_USD_now
query_bss=in_usd*Currency.objects.get(name='YEN').price_USD_now
query_eur=in_usd*Currency.objects.get(name='EUR').price_USD_now
self.total_USD=in_usd
self.total_BTC=query_btc
self.total_YEN=query_bss
self.total_EUR=query_eur
super(Transactions, self).save()
return query_btc;
Ошибка
raise utils.IntegrityError(*tuple(e.args))
django.db.utils.IntegrityError: (1048, "Column 'total_USD' cannot be null
Тот же метод отлично работает, когда выполняется через представление. Как я могу создать миграцию данных для этой модели, используя перезаписанный метод .save ()?