Django TypeError: ключи должны быть str, int, float, bool или None, а не News_Channel

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

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

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

Всего 2 ответа


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

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


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

Пытаться:

for e in voting_result:
    channel[e.channelId.id] = e.rate

Есть идеи?

10000