Я использую DjangoREST с PostgreSQL. У меня есть эти две модели: author / models.py:
class Author(models.Model):
name = models.CharField(max_length=256)
allsize = models.FloatField(default=0)
и в файлах / models.py:
class File(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
name = models.CharField(max_length=256)
size = models.FloatField(default=0)
Если я загружаю несколько файлов одинакового размера (из внешний интерфейс), чтобы обновить поле allsize (которое является суммой всех загруженных файлов) автора, DjangoREST не обновил правильно значения, возможно, в соответствии с параллелизмом (они имеют одинаковый размер), несмотря на то, что я делаю raw sql транзакция:
with connection.cursor() as cursor:
cursor.execute("BEGIN; set transaction isolation level read committed;"
"update author_author set allsize = allsize + %s where author_id = %s;",
[validated_data.get('size', 0), validated_data.get('author', 0)])
cursor.execute("COMMIT;")