Рассмотрим следующий набор:
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