Django name magi c в файле serializers.py для HyperlinkedModelSerializer? - PullRequest
0 голосов
/ 31 марта 2020

, поэтому я пытался отладить проблему, когда для определенного представления, использующего 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. Может быть, у кого-то еще будет понимание!

...