Как быстро обновить поле из связанной модели в django
Я хотел обновить несколько миллионов записей значением из связанной записи с помощью Django queryset, но застрял на
django.core.exceptions.FieldError: Joined field references are not permitted in this query
Раньше я делал это с помощью Subquery
, но это было слишком медленно.
Все, что я хочу, это выполнить этот простой запрос, но я не смог найти эквивалент Queryset для него, поэтому мне пришлось использовать сырой SQL.
update card_cardtransaction
set clearing_date = api_invoice.date_activated
from card_cardtransaction ct join api_invoice
on ct.invoice_id = api_invoice.id
where ct.date_created > '2022-05-17' and id in %ids
Есть идеи, как составить этот запрос, используя только методы queryset?
Это самое близкое, что я смог придумать, но все еще с ошибкой выше.
CardTransaction.objects.filter(id__in=ids)
.select_related('invoice')
.update(
clearing_date=F("invoice__date_activated")
)
Обновление может быть стоит попробовать:
card_transactions = CardTransaction.objects.filter(id__in=ids).select_related('invoice')
cts = []
for ct in cart_transactions:
ct.clearing_date = ct.invoice.date_activated
cts.append(ct)
CardTransactions.objects.bulk_update(cts, ['clearing_date'], batch_size=1000)
обратитесь к документации django docs для получения дополнительной информации