Задать вопрос
@nurzhannogerbek

Как обновить страницу через AJAX в DJANGO?

Здравствуйте! Помогите пожалуйста разобраться.

На странице есть модальное окно с формой для добавления новой книги. После успешного добавления новой книги нужно через AJAX обновить блок со списком книг на странице. Как это реализовать используя CBV и подскажите как правильно должен выглядеть AJAX запрос?

models.py:
class Book(models.Model):
    header = models.CharField(max_length=200, help_text='Заголовок', blank=False,)
    description = models.TextField(help_text='Описание', blank=False,)


forms.py:
class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = '__all__'


views.py:
class DashboardView(View):
    template_name = "dashboard.html"

    def get_context_data(self, **kwargs):
        context = super(DashboardView, self).get_context_data(**kwargs)
        context['books'] = Books.objects.all()

    def post(self, request):
        create_form = BookForm(request.POST)
        if create_form.is_valid():
            create_form.save()
            ???


dashboard.html:
{% include ''books.html' %}

<div id="bookCreateModalBox" class="modal fade">
    <div class="modal-body">
        <form action="" method="post">
            {% csrf_token %}
            {{ create_form.as_p }}
            <input type="submit" value="">
        </form>
    </div>
</div>
  • Вопрос задан
  • 3075 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
tema_sun
@tema_sun
Во вьюшке:
def post(self, request):
        create_form = BookForm(request.POST)
        if create_form.is_valid():
            create_form.save()
            
        response = {"data": "goes here"}

        return HttpResponse(json.dumps(response), content_type='application/json')


В js'e:
$.ajax({
    method: 'post',
    url: your-url,
    data:  serialized-data
}).done(function(response){
    console.log(response.data)
});

Ну или что-то аналогичное, если jquery не используете.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
По аяксу получаете серилизированные объекты и уже на фронте вставляете заново. Идеально для такой задачи чтто-то типа Vue заюзать, но для вас это может быть сложно и незачем.
После получки - десериализовать объекты и вставлять тупо jquery в список куда вам надо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы