Как получить параметр запроса и вернуть django rest-framework - PullRequest
1 голос
/ 01 февраля 2020

Я получаю API, как с этим кодом

http://127.0.0.1:8000/api/mytexts/?genre=93

class MyTextSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyText
        fields = ('id','text','genre')

он возвращает id text genre успешно.

тогда сейчас Я хочу вернуть значение выборки 93 или genre=93 в json.

Итак, я изменил код, но пока не могу понять ...

class MyTextSerializer(serializers.ModelSerializer):
    fetchBy = serializers.SerializerMethodField()
    class Meta:
        model = MyText
        fields = ('id','text','genre','fetchBy)
    def get_fetchBy: # error 'MyTextSerializer' object has no attribute 'get_fetchBy'
        return ????

1 Ответ

2 голосов
/ 01 февраля 2020

Представление запроса на основе классов в DRF передается в сериализатор с дополнительным контекстом по умолчанию. Вы можете получить доступ к этому контексту, используя синтаксис self.context. Таким образом, чтобы получить параметр запроса в сериализаторе, вы можете сделать что-то вроде этого:

class MyTextSerializer(serializers.ModelSerializer):
    fetchBy = serializers.SerializerMethodField()
    class Meta:
        model = MyText
        fields = ('id','text','genre','fetchBy')

    def get_fetchBy(self, obj):
        return self.context["request"].query_params.get("genre")

Не связано с вашим реальным вопросом, но есть одно небольшое замечание по поводу именования переменных. Обратите внимание, что в соответствии с PEP8 имена методов и атрибутов класса должны быть в нижнем регистре и использовать _ в качестве разделителя. Например: fetch_by и get_fetch_by.

...