Исправить AttributeError: у объекта 'str' нет атрибута 'HTTP_201_CREATED' - PullRequest
0 голосов
/ 11 декабря 2018

Я реализовал следующий метод в наборе, и у меня возникла проблема при публикации, я получаю AttributeError: 'str' object has no attribute 'HTTP_201_CREATED'.Почему я получаю это сообщение об ошибке, поскольку data уже сериализован в формат json.

def create(self, request,*args, **kwargs):
        # Payload Items 
        paid_to = request.data['paid_to']
        paid_from = request.data['paid_from']
        amount = request.data['amount']
        description = request.data['description']
        date = request.data['date']
        status = request.data['status']

        # System Item
        auth_= get_auth(request)
        # Limit currency choices if setup
        default_currency = DEFAULT_CURRENCY
        # Get Transaction Type & show cr and dr accounts involved:
        transaction_type = TransactionType.objects.get(id=request.data['transaction_type'])
        get_credit_account = transaction_type.credit_account
        get_debit_account = transaction_type.debit_account 

        # Money To Internal Value 
        amount_to = Money(amount,DEFAULT_CURRENCY)

        # Auto generate transaction number 
        transaction_number = increment_transaction_number()

        # Create Transaction objects 

        transaction = Transaction.objects.create(
            transaction_type=transaction_type,
            organization=auth_,
            paid_to=paid_to,
            paid_from=paid_from,
            description=description,
            date=date,
            amount=amount_to,
            transaction_number=transaction_number)
        trans_id = transaction.id
        # print(trans_id)
        # Add directions to legs  ..note positive direction is DEBIT and negative direction is CREDIT
        positive_direction = 1
        negative_direction = -1


        # Add leg objects instances to track debits and credits TODO can add mutiple legs

        Leg.objects.create(transaction=Transaction.objects.get(id=transaction.id), account=get_credit_account, description=transaction.description, amount=+amount_to * positive_direction)
        Leg.objects.create(transaction=Transaction.objects.get(id=transaction.id), account=get_debit_account, description=transaction.description, amount=-amount_to * negative_direction)

        serializer = CreateTransactionSerializer(transaction)

        from rest_framework.renderers import JSONRenderer
        data = JSONRenderer().render(serializer.data)
        return Response(data, status=status.HTTP_201_CREATED, headers=headers)

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вы переопределяете rest_framework.status с помощью этой строки:

status = request.data['status']

Вам необходимо переименовать эту переменную во что-то другое, чтобы использовать

status.HTTP_201_CREATED из rest_framework библиотеки

0 голосов
/ 11 декабря 2018

Эта ошибка не имеет никакого отношения к вашей сериализации.Он идет из последней строки, где одним из параметров, отправляемых вами в Response, является status=status.HTTP_201_CREATED.Но status вот что вы определили в начале метода: status = request.data['status'].Таким образом, это строка, которая не имеет атрибута с таким названием.

Очевидно, вы имели в виду ссылку на модуль status, который вы импортировали из rest_framework в верхней части вашего модуля.Но ваша строковая переменная скрывает это.Вам нужно изменить имя вашей переменной.

...