Получение «Bad Request» на почтовый запрос к Django Rest-Api с использованием сериализаторов - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь сохранить данные в модель, используя фреймворк django-rest. Я уже написал API, он работает нормально, когда я обращаюсь к нему напрямую, используя URL-адрес для API. Но я получаю ошибку неверного запроса, когда я пытаюсь опубликовать данные, используя ajaxЕсли он работает нормально, когда данные вставляются с использованием интерфейса API, он должен работать нормально, когда данные вставляются с использованием ajax .... но вместо этого я получаю неправильный запрос.

вот метод запроса AJAX (Jquery):

$("form").submit(function(event){
           event.preventDefault();

            var this_ = $(this);
            var formData =this_.serialize();
            $.ajax({
                url: "/api/forum/posts/{{ post_question.thread_id.id }}/create",
                data: formData,
                method: "POST",
                success: function (data) {
                    console.log("successfully returned");
                    console.log(data);
                    displayPosts();

                },
         })

Сериализаторы следующие, в api / serializers.py:

class ThreadModelSerializer(serializers.ModelSerializer):
    created_by = UserDisplaySerializer(read_only=True)
    class Meta:
       model = Thread
       fields = '__all__'


class PostModelSerializer(serializers.ModelSerializer):
    posted_by = UserDisplaySerializer(read_only=True)
    class Meta:
       model = Post
       fields = '__all__'

Модели для публикациии Thread, как указано в models.py:

class Thread(models.Model):
    thread_subject = models.CharField(max_length=250)
    posted_on = models.DateTimeField(auto_now=True)
    category = models.CharField(max_length=250)
    forum_id = models.ForeignKey(Forum, on_delete=models.CASCADE)
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)


class Post(models.Model):
    post_message = models.TextField()
    thread_id = models.ForeignKey(Thread, on_delete=models.CASCADE)
    parent_id = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)
    posted_on = models.DateTimeField(auto_now=True)
    posted_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

, и, наконец, представление API выглядит следующим образом, в api / views.py:

class PostCreateApiView(generics.CreateAPIView):
    serializer_class = PostModelSerializer
    permission_classes = [permissions.IsAuthenticated]

    def perform_create(self, serializer, *args, **kwargs):
        thread_id = self.kwargs.get('thread_id', None)
        thread = get_object_or_404(Thread, id=thread_id)
        parent_post = get_object_or_404(Post, thread_id=thread_id, parent_id__isnull=True)

        serializer.save(posted_by=self.request.user, parent_id=parent_post, thread_id=thread)

, а URL-маршрут выглядит следующим образомв api / urls.py:

    path('posts/<int:thread_id>/create', PostCreateApiView.as_view(), name='post_create'),

Надеюсь, мне удастся четко сформулировать проблему, нужна помощь. Когда я создаю новое сообщение, используя URL-адрес API, например:

http://localhost:8000/api/forum/posts/4/create

, я не получаю ошибок, и сообщение успешно добавляется в базу данных.

Но когдаЯ пытаюсь вставить данные, используя шаблон (ajax), например:

http://localhost:8000/forums/thread/4/

Я получаю неверный запрос, например:

Bad Request: /api/forum/posts/4/create
HTTP POST /api/forum/posts/4/create 400 [0.02, 127.0.0.1:40630]

Нужна помощь,Я очень старался, но не могу найти решение. В ожидании ответа. Спасибо.

...