Возврат из метода создания сериализаторов DRF без фактического создания какого-либо экземпляра - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть ситуация, когда в определенном исключительном случае я должен продолжать отлавливать ошибку и продолжать выполнение кода. В настоящее время мой код выглядит так:

s = TestSerializer(...)
if s.is_valid():
   instance = s.save()
perform_some_query() # Django yells here



class TestSerializer(serializers.ModelSerializer):

    def create(self, request, *args, **kwargs):
        try:
            return super().create(request, *args, **kwargs)
        except SomeError as err:
            if this_is_the_super_exotic_case:
                return None # Don't shout, just continue silently and don't create an object
            raise

Проблема в том, что Django кричит на меня при выполнении perform_some_query() (см. Строку 3 фрагмента кода), говоря, что:

django.db.transaction.TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block. What is the reason for this?
...