Как установить определенный набор запросов на ObjectSerializerModel - PullRequest
0 голосов
/ 25 мая 2018

Я занимаюсь разработкой веб-системы с использованием Django 1.11 и текущей версии Django Rest Framework, которая является 3.8.2.

У меня возникла проблема при обслуживании JSON моих моделей в этом проекте.Мне нужно передать JSON, который содержит определенный атрибут.

Я приведу пример моего serializers.py, чтобы облегчить понимание моей проблемы.

class LikertSerializerModel(serializers.ModelSerializer):    
    class Meta:
        model = Likert
        fields = ('id', 'escala')

class RespostaSerializerModel(serializers.ModelSerializer):
    likerts = LikertSerializerModel(many = True, read_only = True)

    class Meta:
        model = Resposta
        fields = ('id', 'resposta','tipo', 'foto', 'pergunta', 'qtd_escolhida', 'classificacao_escala', 'data', 'likerts')

class PerguntaSerializerModel(serializers.ModelSerializer):
    respostas = RespostaSerializerModel(read_only=True ,many=True)

    class Meta:
        model = Pergunta
        fields = ('id', 'pergunta', 'tipo_questao', 'questionario', 'respondida', 'data_inicial', 'data_final',
                  'obrigatoria', 'outros', 'ordem', 'qtd_max_caracteres', 'respostas')

class QuestionarioSerializerModel(serializers.ModelSerializer):
    entrevistadores = UsuarioSerializer(many = True, read_only = True)
    sub_administrador = UsuarioSerializer(read_only= True)
    perguntas = PerguntaSerializerModel(many = True, read_only = True)

    class Meta:
        model = Questionario
        fields = ('id', 'titulo', 'descricao', 'data', 'duracao', 'localizacao', 'sub_administrador', 'entrevistadores', 'perguntas')

ПРОБЛЕМА: Видите, в PerguntaSerializerModel у меня есть это поле "respostas".И дело в том, что я хочу только передать этому объекту Pergunta, объектам Resposta, которые имеют атрибут «tipo» со значением «alt» и связаны с этим объектом Pergunta.

PS: Если вам нужно объяснение того, как эти классы связаны, то здесь (мы можем игнорировать объект Лайкерта, поскольку он бесполезен для проблемы):

A Resposta Object isс помощью ForeignKey к одному объекту Pergunta , а объект Pergunta связан с помощью ForeignKey к одному объекту вопросника .

A Объект Questionario может иметь один или несколько Объектов Pergunta и Объект Pergunta может иметь один или несколько Resposta Objects

Когда вы выполняете GET в оставшемся URL-адресе, окончательный JSON начнется с объекта Questionario и будет каскадироваться до последнего объекта Pergunta.

Пожалуйста, помогите мне найти ответ, я не смог его найтив документации REST, потому что я незнаю, что мне нужно искать.

С уважением.

1 Ответ

0 голосов
/ 25 мая 2018

Здесь вам нужен SerializerMethodField () .Вы можете прочитать документы для получения дополнительной информации об этом.

Создайте метод на сериализаторе PerguntaSerializerModel, который возвращает отфильтрованный набор запросов Resposta объектов на основе атрибута tipo.

Примерно так должно работать нормально:

class PerguntaSerializerModel(serializers.ModelSerializer):

    respostas = serializers.SerializerMethodField()

    class Meta:
        model = Pergunta
        fields = ('id', 'pergunta', 'tipo_questao', 'questionario', 'respondida', 'data_inicial', 'data_final',
                  'obrigatoria', 'outros', 'ordem', 'qtd_max_caracteres', 'respostas')

    def get_respostas(self, obj):
           reposta_qs = obj.filter(reposta__tipo='alt')
           resposta_serailizer = RespostaSerializerModel(reposta_qs, read_only=True ,many=True)
           return resposta_serailizer.data

Дайте мне знать, если это поможет!

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