Проблема: приемник сигнала проверяет, существует ли запись модели для определенных условий, и если нет, то создает новую запись. В некоторых редких случаях запись дублируется.
В функции приемника:
try:
my_instance = MyModel.objects.get(field1=value1, field2=sender)
except:
my_instance = MyModel(field1=value1, field2=sender)
my_instance.save()
Это очевидный кандидат на get_or_create
, но помимо очистки этого кода, поможет ли использование get_or_create
предотвратить эту проблему?
Сигнал отправляется после действия пользователя, но я не верю, что исходный запрос дублируется, потому что это вызвало бы другие действия.
Дублирование произошло несколько раз в тысячах случаев. Это обязательно вызвано несколькими запросами или можно каким-то образом создать повторяющийся поток? И есть ли способ — возможно, с детальным управлением транзакциями — предотвратить дублирование?
Использование Django 1.1, Python 2.4, PostgreSQL 8.1 и mod_wsgi на Apache2.
MyModel
когда-либо получит дубликат, созданный любым способом, он будет постоянно создавать дубликаты, когдаget
возвращает исключениеMultipleObjectsReturned
. - person Yuji 'Tomita' Tomita   schedule 12.03.2011