Django AJAX не обновляется после вызова POST - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть этот жирный GET запрос в ajax.

Является ли это GET request в некотором роде д плохой практикой, учитывая зацикливание элементов?

let pages = 0;
        $.ajax({
            url: '/posts/',
            method: 'GET',
            dataType: 'json',
            success: function (data) {
                let totalObjects = Object.keys(data.posts).length.toString();

               # check how much pages should be displayed based on data length

                let rows = '';
                data.posts.forEach(post => {
                    rows +=
                        '<tr class="postTable" style="display: none;">' +
                        '<th scope="row"><input type="checkbox" aria-label="Checkbox" style="display: none"></row>' +
                        '<td class="tm-product-name"><a href="' + '/posts/' + post.slug + '/edit/">' + post.title + ' </a></td>' +
                        '<td class="text-center">145</td>' +
                        '<td class="text-center">' + post.total_likes + '</td>' +
                        '<td>' + post.created_at + '</td>' +
                        '<td><i class="fas fa-trash-alt tm-trash-icon" id="delete-icon" data-id="'+ post.slug + '"></i></td>' +
                        '</tr>';
                });
                $('tbody').append(rows);
                let current_page = '';
                let tables = document.getElementsByClassName('postTable');
                $('#pagination-test').twbsPagination({
                    totalPages: pages,
                    visiblePages: 5,
                    onPageClick: function (event, page) {
                        console.log('ALARMM');
                        current_page = page;
                        console.log('PAGE Changed');
                        console.log('Page: ' + current_page);
                        switch (current_page) {
                          # here i'm looping all the elements via switch case for pagination.
                        }
                    },
                });
            }
        });

ajax POST

$(document).on('click','tr[class="postTable"] td i[id="delete-icon"]' ,function () {
            let action = confirm('Are you sure you want to delete this post?');
            let slug = $(this).attr('data-id');
            console.log(slug);
            let url = '/posts/' + slug + '/delete/';
            if (action != false) {
                $.ajax({
                    method: 'POST',
                    url: url,
                    dataType: 'json',
                    data: slug,
                    success: function (data) {
                        $('post_table').remove()
                    }
                });
            }
        });

Просмотры

class PostList(JSONResponseMixin, AjaxResponseMixin, ListView):
    template_name = 'dashboard/posts.html'
    context_object_name = 'user_posts'
    ordering = ['created_at']

    def get_queryset(self):
        profile = Profile.objects.get(user_id=self.request.user.id)
        return Post.objects.get_user_posts(profile.id)

    def get_ajax(self, request, *args, **kwargs):
        posts = list(self.get_queryset().values())
        data = dict()
        data['posts'] = posts
        return self.render_json_response(data)

class DeletePost(CsrfExemptMixin, SingleObjectMixin, View):
    model = Post

    def post(self, *args, **kwargs):
        self.object = self.get_object()
        self.object.delete()
        data = {'success': 'OK'}
        return JsonResponse(data)

Технически все работает, данные удаляются, они отображаются только после обновления страницы sh

...