Мои объекты не фильтруются, несмотря на установку функции get_queryset в views.py - PullRequest
0 голосов
/ 14 апреля 2019

Я хочу сделать API, чтобы получить подробный вид блога из списка опубликованных постов в блоге.Чтобы решить эту проблему, я использую фильтры get_queryset (), чтобы решить эту проблему, но он просто возвращает весь список, то есть фильтр не работает.

Я использовал код, как показано ниже:

models.py

class BlogModel (models.Model) :
    heading = models.CharField(max_length=254)
    blog = models.TextField()
    author = models.CharField(max_length=254)

views.py

class BlogRetrieveView(generics.RetrieveUpdateDeleteAPIView):
    serializer_class=BlogListSerializer
    queryset=BlogModel.objects.all()
    lookup_field='blog_id'

    def get_queryset(self,*args, **kwargs):
        return BlogModel.objects.filter(
            blog__id=self.kwargs['blog_id']

serializers.py

class BlogListSerializer(serializers.ModelSerializer):
    class Meta:
        model = BlogModel
        fields = '__all__'

urls.py

 url(r'^blog/(?P<blog_id>\d+)/$',BlogRetrieveView.as_view()),

Iполучаю следующий вывод:

Это показывает 1 из 7 сообщений блога, показанных в списке. Очевидно, что фильтр не был применен.

Редактировать1: С учетом этих советов мой код на localhost работал, но производственный веб-сайт все еще застрял в ситуации, упомянутой в проблеме выше.Что может быть причиной этого?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Если вы используете класс RetrieveUpdateDeleteAPIView, вы, вероятно, не хотите использовать lookup_field='blog_id' и вместо этого намереваетесь использовать lookup_url_kwarg='blog_id'.Вам также следует удалить свой метод get_queryset(), так как представление будет обрабатывать его для вас.

Когда вы измените это, ваше представление получит правильное значение из URL r'^blog/(?P<blog_id>\d+)/$', используя lookup_url_kwarg, и оно будетпопытайтесь выполнить поиск с помощью поля id в BlogModel.

Кроме того, если ваш запрос к /api/blog/9/ возвращал список, то ваша URL-конфигурация должна быть неправильной, поскольку класс RetrieveUpdateDeleteAPIView не возвращает этот JSON, он будет возвращать словарный объект данных вашей модели.Ваш URL списка блогов настроен как r'^blog/$'?(отсутствие $ в конце может быть причиной)

0 голосов
/ 14 апреля 2019

Я думаю, вы должны удалить lookup_field и get_queryset() BlogRetrieveView и изменить URL-адреса на url(r'^blog/(?P<pk>\d+)/$',BlogRetrieveView.as_view())

...