Я работаю над проектом Django 1.8, который имеет расширенный набор функций в административной части.Один из подклассов ModelAdmin
переопределяет метод response_change
для обработки действия кнопки APPROVE
.Итак, код выглядит следующим образом:
class MyModelAdmin(ModelAdmin):
def response_change(self, request, obj):
rel = obj.rel
rel.title = obj.title
rel.save()
serialize('json', (rel, ))
obj.approved = true
obj.save()
return super().response_change(request, obj)
И я получаю сообщение об ошибке в строке сериализации:
File "/env/lib/python3.6/site-packages/django/core/serializers/__init__.py", line 129, in serialize
s.serialize(queryset, **options)
File "/env/lib/python3.6/site-packages/django/core/serializers/base.py", line 68, in serialize
self.handle_m2m_field(obj, field)
File "/env/lib/python3.6/site-packages/django/core/serializers/python.py", line 77, in handle_m2m_field
for related in getattr(obj, field.name).iterator()]
File "/env/lib/python3.6/site-packages/django/core/serializers/python.py", line 76, in <listcomp>
self._current[field.name] = [m2m_value(related)
File "/env/lib/python3.6/site-packages/django/db/models/query.py", line 238, in iterator
results = compiler.execute_sql()
File "/env/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 840, in execute_sql
cursor.execute(sql, params)
File "/env/lib/python3.6/site-packages/django/db/backends/utils.py", line 59, in execute
self.db.validate_no_broken_transaction()
File "/env/lib/python3.6/site-packages/django/db/backends/base/base.py", line 327, in validate_no_broken_transaction
"An error occurred in the current transaction. You can't "
django.db.transaction.TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.
Произошла ошибка в текущей транзакции.Вы не можете выполнять запросы до конца «атомарного» блока.
Если я удаляю строку сериализации - такая же ошибка появляется в строке obj.save()
.И самое странное в том, что такая ошибка возникает на некоторых объектах, а не на других.
Что может быть причиной этого?Как исправить?