AssertionError: Ожидается, что `Response`,` HttpResponse` или `HttpStreamingResponse` будут возвращены из представления, но получили` <class 'NoneType'> ` - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть следующий объект комнаты, в котором пользователи в качестве членов.

class Room(Base):
    name = models.CharField(db_index=True, unique=True, max_length=255)
    members = models.ManyToManyField(User, blank=True)

Я пытаюсь найти комнату, в которой есть только два конкретных участника,

if Room.objects.filter(members__id=first.id).filter(members__id=second.id).exists():
                    rooms = Room.objects.filter(members__id=first.id).filter(members__id=second.id)
                    for room in rooms:
                        print(room.members.count)
                        if room.members.count == 2:
                            return Response({"Success": RoomSerializer(room).data}, status=status.HTTP_200_OK)

Я знаю, что существует объект Комната, который имеет только двух членов. Но я получаю эту ошибку,

AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

QuerySet count () является методом (type(room.members.count) возвращает <class 'method'>) и должен вызываться как таковой.Просто измените

room.members.count

на

room.members.count()

, и все должно работать как положено.

0 голосов
/ 18 ноября 2018

Как сказано в исключении, в конце представления всегда возвращайте ответ.В вашем текущем коде, если логика не совпадает, то она возвращает None.So, обновите код следующим образом:

if Room.objects.filter(members__id=first.id).filter(members__id=second.id).exists():
                rooms = Room.objects.filter(members__id=first.id).filter(members__id=second.id)
                for room in rooms:
                    print(room.members.count)
                    if room.members.count == 2:
                        return Response({"Success": RoomSerializer(room).data}, status=status.HTTP_200_OK)
return Response({"Failed": True}, status=status.HTTP_400_BAD_REQUEST) # <-- Return a bad request maybe at the end if all logic fails
...