get_or_create не является атомарным, что означает, что «Проверка, существует ли элемент, создайте его, если нет, а затем верните его», может выполняться одновременно. Если оба потока обнаружат, что элемент не существует до создания строки, система попытается создать несколько строк. (примечание: я проверил эту логику и подтвердил, что она по-прежнему присутствует как минимум в Django 2.0.10). Создание или уничтожение «сессионных» объектов здесь не имеет значения, поскольку цель состоит в том, чтобы безопасно создать новый объект связанного типа.

я есть модель Django, доступ к которой можно получить только с помощьюget_or_create(session=session)где сессия является внешним ключом для другой модели Django.

Поскольку я только доступ черезget_or_create()Я бы предположил, что у меня будет только один экземпляр с ключом для сессии. Тем не менее, я нашел несколько экземпляров с ключами для одного сеанса. Что случилось? Это состояние гонки илиget_or_create() работать атомарно?