, поэтому я пытался отладить проблему, когда для определенного представления, использующего HyperlinkedModelSerializer, один уровень данных возвращался как целые, а не как URL. Ie, я получаю
{
"id": 4,
"title": "asdf",
"photos": [
4
],
},
, где я должен был получить
{
"id": 4,
"title": "asdf",
"photos": [
"http://localhost:8000/pics/4/"
],
},
Что было действительно странно, это точно та же самая функция просмотра работает , когда Я перемещаю его в файл serializers.py, но возвращает неверные данные, когда они находятся в views.py. Функция выглядит следующим образом:
class MemberMenuItemsViewSet(AuthModelViewSet):
"""
all items available from this maker (from all menus)
"""
serializer_class = MenuItemSerializer
queryset = MenuItem.objects.all()
def get_queryset(self):
#def get(self, request, *args, **kwargs):
member_id = self.kwargs.get('member_id')
return MenuItem.objects.filter(
menu__owner_id=member_id).order_by('-updated_at')
(мой AuthModelViewSet наследует от rest_framework.viewsets.ModelViewSet, а MenuItemSerializer наследует от rest_framework.serializers.HyperlinkedModelSerializer)
Сейчас я решил свою проблему переместить эту функцию в файл serializers.py и настроить вызов в нем в urls.py; но это сбивает с толку, почему перемещение функции здесь, а не в views.py, должно иметь какое-то значение. Я несколько раз тестировал его, и я пришел к выводу, что происходит какое-то имя волхвов c? Или где-то, что я не понял, что файл serializers.py предварительно обрабатывается?
Это больше не проблема для меня, но я хотел поделиться опытом и спросить, потому что я потратил на это хороший час сегодня утром пытаясь проникнуть в ядро ModelSerializer, чтобы увидеть, в чем разница, как он называется, et c. Может быть, у кого-то еще будет понимание!