Django bulk create с внешним ключом к другому полю
Я хочу массово создавать объекты, когда у них есть внешний ключ и их внешний ключ не является полем id. (Когда значение поля to_field равно id, вы можете ссылаться на него с помощью model_id при создании, но я не нашел способа сделать id с другим полем)
У меня есть модель с именем Credit:
class Credit(models.Model):
account = models.ForeignKey('finance.Account', to_field='account_id', on_delete=models.PROTECT)
amount = models.PositiveBigIntegerField()
и модель с именем Account:
class Account(models.Model):
account_id = models.UUIDField(
verbose_name=_("account id"),
db_index=True,
null=True,
unique=True,
)
и я попытался создать объекты с помощью:
accounts = [] # list of uuids
credits = [
Credit(
account__account_id=a,
amount=amount,
) for a in accounts]
created_objects = Credit.objects.bulk_create(
credits, ignore_conflicts=True
)
и я получаю следующую ошибку:
TypeError: Credit() получил неожиданный аргумент ключевого слова 'account__account_id'
Это невозможно, потому что вы касаетесь двух таблиц: Credit и Account. Поэтому вам в любом случае нужно по крайней мере две INSERT.
accounts_uuids = []
amount = 0
accounts = [Account(account_id=uuid) for uuid in accounts_uuids]
Account.objects.bulk_create(objs=accounts)
credits = [Credit(account=account, amount=amount) for account in accounts]
Credit.objects.bulk_create(objs=credits, ignore_conflicts=True)