Django Rest Framework TypeError только с возможностью просмотра API - PullRequest
0 голосов
/ 04 февраля 2019

Рассмотрим следующий набор:

class FooBarView(viewsets.ModelViewSet):
    serializer_class = FooBarSerializer
    permission_classes = [IsAuthenticated]

def list(self, request, *args, **kwargs):
    instance = self.get_queryset()
    serializer = self.get_serializer(instance)
    return Response(serializer.data)

def get_queryset(self):
    user = self.request.user
    return FooBar.objects.filter(user=user)

следующую модель:

class FooBar(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )
    other fields ...

и следующий сериализатор

class FooBarSerializer(serializers.ModelSerializer):
    class Meta:
        model = FooBar
        fields = ('user', other fields ...)

Этот набор отлично работает с JsonRenderer, но BrowsableAPIRenderer вызывает ошибку TypeError как на маршруте получения, так и на маршруте списка:

__str__ returned non-string (type NoneType)

/home/ubuntu/venv/lib/python3.6/site-packages/rest_framework/relations.py in display_value, line 228

def display_value(self, instance):
    return six.text_type(instance) 

Local Vars

instance: Error in formatting: TypeError: __str__ returned non-string (type NoneType)

self: PrimaryKeyRelatedField(allow_null=True, queryset=User.objects.all(), required=False, validators=[<UniqueValidator(queryset=FooBar.objects.all())>])

Если я удалю пользовательское поле из сериализатора, оно будет работать нормально.В экземпляре FooBar есть пользователь, все остальные поля также имеют намерение.

Есть идеи, откуда это может быть?

Я использую python3.6 с django2.0 и DRF3.9.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...