Django TypeError: ключи должны быть str, int, float, bool или None, а не News_Channel - PullRequest
0 голосов
/ 17 мая 2019

Это мой вид входа в систему.

def login(request):
    username = request.data.get("username")
    password = request.data.get("password")
    if username is None or password is None:
        return Response({'error': 'Please provide both username and password'},
                        status=HTTP_400_BAD_REQUEST)
    user = authenticate(username=username, password=password)
    if not user:
        return Response({'error': 'Invalid Credentials'},
                        status=HTTP_404_NOT_FOUND)
    token, _ = Token.objects.get_or_create(user=user)
    voting_result = Count.objects.filter(userId=user.id)
    print(voting_result)
    channel = {}

    for e in voting_result:
        channel[e.channelId] = e.rate
    return Response({'token': token.key, 'user': user.username, 'email': user.email, 'id': user.id, 'stats': channel},
                    status=HTTP_200_OK)

Я хочу добавить словарь канал в своем ответе.Но я получаю эту ошибку.

keys must be str, int, float, bool or None, not News_Channel

Что мне делать, чтобы в моем ответе был словарь channel ?Я буду использовать его в своем приложении реакции.

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Похоже, вам нужно channelId идентификатор в качестве ключа

Попробуйте:

for e in voting_result:
    channel[e.channelId.id] = e.rate
1 голос
/ 17 мая 2019

Диктофоны Python могут обрабатывать только неизменяемые хешируемые ключи, такие как str, int, float, bool, tuple, frozenset и т. Д. Если сущность не является хэшируемой или изменяемой, она не может быть ключом словаря.Если вы хотите использовать e.channelId в качестве ключа, вы должны преобразовать его в строку, например:

channel[str(e.channelId)] = e.rate

...