Я хочу выбрать лучший связанный объект и сохранить новый в одном запросе, чтобы избежать состояния гонки. Является ли это возможным? Решает ли select_for_update эту проблему?
class Order(models.Model):
price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
maker_order = models.OneToOneField('self', on_delete=models.CASCADE, blank=True, null=True,
related_name='taker_order')
def save(self, *args, **kwargs):
self.maker_order = Order.objects.filter(maker_order__isnull=True, taker_order__isnull=True,
price__lte=self.price
).order_by('price').first()
super().save(*args, **kwargs)