Как правильно извлечь объекты из базы данных, используя Django REST API? - PullRequest
0 голосов
/ 18 марта 2020

Я учу себя, как использовать Django REST API, но я сталкиваюсь с JSONDecodeError. Я пытаюсь отобразить сообщения в зависимости от пользователя, который хранится в сеансе. Я сохраняю имя пользователя, пароль и идентификатор в сеансе для последующего использования. JSONDecodeError направляется на строку с инструкцией posts = posts_response. json (), когда я смотрю на страницу ошибки HTML

Вот мои views.py:

posts_path = "http://127.0.0.1:8000/posts/"

def index(request):
   if request.method=='GET':
       post_form = PostForm()
       posts_response = requests.get(posts_path)
       posts = posts_response.json()
       context = {
            'post_form': post_form,
            'post_list': posts,
       }
       return render(request, 'UserLanding/index.html', context)
    else:
        return render(request, "UserLanding/index.html")

Это мои просмотры:

class PostView(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

    def get_queryset(self):
        query_set = self.queryset.filter(user=self.request.session['id'])
        return query_set

class SubscriberView(viewsets.ModelViewSet):
    queryset = Subscriber.objects.all()
    serializer_class = SubscriberSerializer

Мои зарегистрированные URL:

router = routers.DefaultRouter()
router.register('posts', viewsets.PostView)
router.register('users', viewsets.SubscriberView)

И сериализаторы:

class SubscriberSerializer(serializers.ModelSerializer):
class Meta:
    model = Subscriber
    fields = ('id', 'username', 'password')


class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ('id', 'post_text', 'pub_date', 'user')

Пожалуйста, помогите мне определить проблему. Заранее спасибо

РЕДАКТИРОВАТЬ: я смог решить проблему, добавив функцию в мой код PostView, как это:

@action(detail=False, methods=['GET'], url_path=r'(?P<user_id>[0-9]+)')
def find_by_user_id(self, request, user_id):
    user = Subscriber.objects.get(id=user_id)
    posts = Post.objects.filter(user=user)
    serializer = self.serializer_class(posts, many=True)
    return Response(serializer.data)

и мой request.get () теперь указывает на это:

posts_response = requests.get(posts_path + str(request.session['id']))
...