Как отфильтровать лучшие связанные и создать в одном запросе? - PullRequest
0 голосов
/ 06 октября 2019

Я хочу выбрать лучший связанный объект и сохранить новый в одном запросе, чтобы избежать состояния гонки. Является ли это возможным? Решает ли 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)
...