TransactionManagementError во время вызова `response_change` - PullRequest
0 голосов
/ 05 марта 2019

Я работаю над проектом 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().И самое странное в том, что такая ошибка возникает на некоторых объектах, а не на других.

Что может быть причиной этого?Как исправить?

...