Задать вопрос
  • Как правильно сделать множественный выбор?

    @nurzhannogerbek Автор вопроса
    dimonchik2013: Я обновил свой пост. Можете ли взглянуть на view?

    Я использовал следующую строку кода, которая возвращает список отмеченных пользователем чекбоксов. А точнее первые значения списка. Например: ['A', 'C']

    symbols = form.cleaned_data.get('symbol')

    Мне необходимо взять вторые, человекочитаемые значения (Например: "Название A") и записать их в поле name. Неуверен в правильности нижестоящего кода. Что можете сказать?

    requirement.name = symbol.get_symbol_display()
  • Нету значения {% csrf_token %}?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: СПАСИБО ВАМ ОГРОМНОЕ! Вы спасли меня снова. Знаю это будет не по теме, но как вы сами изучали JQuery/Javascript. Чувствую есть пробелы у меня большие. Хотелось бы узнать как вы изучали. Возможно есть книги или ресурсы, которые вы могли бы посоветовать? СПАСИБО вам еще раз! =)
  • Нету значения {% csrf_token %}?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Смотрите получается должно быть так? Я привел код из JS и html. Я правильно вас понял на элемент выше custom-list-group стоит comment-block?

    task_list.html:
    {% for task in tasks %}
    
    <!--Блок связанный с комментариями для Задачи-->
    <div class="collapse w-100 comment-block" id="collapse-task-{{ forloop.counter }}">
       <div class="list-group custom-list-group">
    
          <div class="list-group-item bg-faded">
                   {% include 'project/task_comment_form.html' %}
           </div>
    
           <div class="task-comments">
                 {% include 'project/task_comment_list.html' %}
            </div>
    
         </div>
    </div>
    
    {% endfor %}


    JS:
    $('.comment-block').on('submit', '.task-comment-form', function(event) {
         //Остальной код
    });
  • Нету значения {% csrf_token %}?

    @nurzhannogerbek Автор вопроса
    Вот оно как. В будущем приму данную информацию к сведению. Спасибо. Использовал context.update(csrf(request)) в view и ошибка исчезла, но возникла другая ошибка, которую описал в одном из последних комментариев под постом. Могли бы подсказать что делаю не так?
  • Нету значения {% csrf_token %}?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Кажется вы меня не до конца поняли. Модальное окно нужно только для добавления новой задачи. Привел снизу макет страницы для наглядности, чтобы лучше представить все. Пользователь нажимает кнопку task-add-button, открывает модальное окно, далее пользователь вводит название новой задачи, список обновляется. То есть после добавления новой задачи появляется новый блок (task namee, task-comment-form, task-comments). У меня же проблема с вводом комментария в одну из форм в обновленном через ajax списке.

    25abbe13a4e84fe28b02978cdf35a720.PNG

    При добавлении комментария через любую форму страница становится такого рода и комментарии добавляются в базу данных, но список не обновляется:
    e83369be3cbe4d1ba2269f3d9b5ef135.PNG

    Блоки task-comment-form, task-comments находится внутри custom-list-group в template.
  • Нету значения {% csrf_token %}?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Cпасибо за совет! Использовал во view предложенный вами код `context.update(csrf(request))` и ошибка из логов исчезла. Но можно еще один вопрос. Знаю это уже совсем другой вопрос, но возможно это как-то связано с {% csrf_token %} в обновленном через AJAX списком задач. У меня под каждой задачей есть формы для комментариев. После того как AJAX обновил список задач, в этот обновленном списке я пытаюсь добавить комментарий к задаче через одну из форм. Список комментариев для задачи тоже с помощью AJAX должен был обновиться. Но список комментариев не обновляется. При обычной ситуации все работает список комментариев к задаче обновляется. С чем связано такое поведение на ваш взгляд? Почему формы для комментариев не работают правильно при обновленном через AJAX cписке задач? Приведу пример кода добавления комментариев для наглядности.

    views.py:
    def task_comment_add(request, project_code, task_code):
        data = dict()
        project = get_object_or_404(Project, pk=project_code)
        task = get_object_or_404(Task, pk=task_code)
        if request.method == 'POST':
            form = CommentForm(request.POST)
            if form.is_valid():
                comment = form.save(commit=False)
                comment.author = request.user
                comment.save()
                task.comments.add(comment)
                data['form_is_valid'] = True
                data['html_task_comment'] = render_to_string('project/task_comment_list.html' {'task': group_task})
            else:
                data['form_is_valid'] = False
        else:
            form = CommentForm()
        context = {'project': project, 'task': task, 'form': form}
        data['html_task_comment_form'] = render_to_string('project/task_comment_form.html', context, request=request)
        return JsonResponse(data)


    JS:
    // TASK COMMENT ADD
    $(".task-comment-form").submit(function(event) {
        event.preventDefault();
        console.log(event.preventDefault());
        var form = $(this);
        $.ajax({
            url: form.attr("action"),
            data: form.serialize(),
            type: form.attr("method"),
            dataType: 'json',
            success: function (data) {
                var current_group = form.closest('.custom-list-group');
                if (data.form_is_valid) {
                    current_group.find(".task-comments").html(data.html_task_comment);
                }
                else {
                    current_group.find(".task-comment-form").html(data.html_task_comment_form);
                }
            }
        });
        form[0].reset();
        return false;
    });
  • Нету значения {% csrf_token %}?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Я уже пробовал код из данной ссылки до этого. А точнее перед комментарием //TASK в своем JS коде вставил следующий код. Не помогло или я что-то сделал не правильно. Как думаете?

    function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie !== '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    
    var csrftoken = getCookie('csrftoken');
    
    function csrfSafeMethod(method) {
        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
    }
    
    $.ajaxSetup({
        beforeSend: function(xhr, settings) {
            if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                xhr.setRequestHeader("X-CSRFToken", csrftoken);
            }
        }
    });
    
    //TASK
    // Дальше код из поста
  • Нету значения {% csrf_token %}?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Да через AJAX загружается модальное окно в которой пользователь пишет название новой задачи, затем так же через AJAX обновляется список задач.
  • Нету значения {% csrf_token %}?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov: Данную ошибку я вижу в логах редактора PyCharm, которым пользуюсь. Не правильно вывозился. Не в "инструмент разработчика" в браузере. Подскажите пожалуйста как именно проверить этот токен в ajax-запросе?
  • “CSRF token missing or incorrect” в AJAX / Django?

    @nurzhannogerbek Автор вопроса
    Юрий Мороз пробовал в свой saveForm function вот этот код
    `data: form.serialize().append('csrfmiddlewaretoken', getCookie(csrftoken))`.
    Результата это не дало. Что делаю не так подскажите пожалуйста.
  • “CSRF token missing or incorrect” в AJAX / Django?

    @nurzhannogerbek Автор вопроса
    Nekr0z : пробовал в свой saveForm function вот этот код
    data: form.serialize().append('csrfmiddlewaretoken', getCookie(csrftoken))
    Результата это не дало. Что делаю не так подскажите пожалуйста.
  • “CSRF token missing or incorrect” в AJAX / Django?

    @nurzhannogerbek Автор вопроса
    Попробовал данный код, но он не работает. Можете сказать что не так сделал? Вставил alert(csrftoken) в функцию saveForm для проверки. При попытки сохранить комментарий выдает выдает длинную строку, вроде csrftoken есть. Но вот сохранить сам комментарий не получается. Под формой появляется сообщение `This field is required` при том что форма не пустая. Кажется с неправильно прописал параметр data. Помогите пожалуйста разобраться.

    JS:
    function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie !== '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    var csrftoken = getCookie('csrftoken');
    
    // TASK
    
    $(function () {
        var loadForm = function () {
            var btn = $(this);
            $.ajax({
                url: btn.attr("data-url"),
                type: 'get',
                dataType: 'json',
                beforeSend: function () {
                    $("#modal").modal("show");
                },
                success: function (data) {
                    $("#modal .modal-content").html(data.html_task_form);
                }
            });
        };
    
        var saveForm = function () {
            var form = $(this);
            $.ajax({
                url: form.attr("action"),
                data: {
                    data: form.serialize(),
                    csrfmiddlewaretoken: getCookie('csrftoken')
                },
                type: form.attr("method"),
                dataType: 'json',
                success: function (data) {
                    if (data.form_is_valid) {
                        $("#task-list").html(data.html_task);
                        $("#modal").modal("hide");
                    }
                    else {
                        $("#modal .modal-content").html(data.html_task_form);
                    }
                }
            });
            $.ajaxSetup({
                beforeSend: function(xhr, settings) {
                    if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
                        xhr.setRequestHeader("X-CSRFToken", csrftoken);
                    }
                }
            });
            return false;
        };
    
        // Create TASK
        $("#task-add-button").click(loadForm);
        $("#modal").on("submit", ".js-task-add-form", saveForm);
        // Update TASK
        $("#task-list").on("click", "#js-edit-task-button", loadForm);
        $("#modal").on("submit", ".js-task-edit-form", saveForm);
    });
  • “CSRF token missing or incorrect” в AJAX / Django?

    @nurzhannogerbek Автор вопроса
    Подскажите как правильно в моем конкретном случаи вставить данный параметр? В моем функции saveForm есть data: form.serialize(). Как именно вписать туда предложенную вами запись. Не могу разобраться.
  • “CSRF token missing or incorrect” в AJAX / Django?

    @nurzhannogerbek Автор вопроса
    {% csrf_token %} есть в форме. В обычном состоянии форма работает, комментарии добавляются. Проблема возникает когда, пытаюсь отправить данные через форму в обновленном через AJAX списке. Пример описал в самом посте. Например добавил задачу, список обновился через AJAX, но затем, в этом обновленном списке, когда пытаюсь отправить данные через одну из форм выдает ошибку.

    Я нашел такой код, только вот не знаю как его прикрутить к своему JS коду. Можете помочь?

    function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    var csrftoken = getCookie('csrftoken');
    function csrfSafeMethod(method) {
        // these HTTP methods do not require CSRF protection
        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
    }
    $.ajaxSetup({
        beforeSend: function(xhr, settings) {
            if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                xhr.setRequestHeader("X-CSRFToken", csrftoken);
            }
        }
    });
  • Указать уникальный id для множества форм в одной странице?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Поменял везде на класс и заработало! ВЫ МАГ! Спасибо большое! =) Но есть последний вопрос, после добавления сообщения список обновляется, но сама форма содержит предыдущее сообщение. Почему $(".task-comment-form")[0].reset(); не очищает форму?! Можете опубликовать ваш ответ в виде отдельного поста, чтобы я смог его отметить.
  • Указать уникальный id для множества форм в одной странице?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: У меня была первоначально идея в templatе указать ID как task-comment-form-{{forloop.counter}} (для форм) и task-comments-{{ forloop.counter }} (для блока с комментариями). Тем самым сделав id уникальным. Только вот не смог додумать универсальный JS код который обрабатывал бы формы правильно. Что вы думаете по этому поводу?
  • Указать уникальный id для множества форм в одной странице?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Заменил в своем первоначальном коде свойство success, предложенное вами. К сожалению работает только первая форма. Остальные не работают, перебрасывает на url `task_comment_add`, где показан кусок JsonResponse(data). Возможно я сделал опечатку можете проверить пожалуйста мой JS код?!

    JS:
    $("#task-comment-form").submit(function(event) {
        event.preventDefault();
        console.log(event.preventDefault());
        var form = $(this);
        $.ajax({
            url: form.attr("action"),
            data: form.serialize(),
            type: form.attr("method"),
            dataType: 'json',
            success: function (data) {
                var current_group = form.closest('.custom-list-group');
                if (data.form_is_valid) {
                    current_group.find("#task-comments").html(data.html_task_comment);
                }
                else {
                    current_group.find("#task-comment-form").html(data.html_task_comment_form);
                }
            }
        });
        $("#task-comment-form")[0].reset();
        return false;
    });
  • Указать уникальный id для множества форм в одной странице?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Поясните пожалуйста а каком приведенном коде идет речь? Просто уже голова кругом идет, столько всего перепробовал. Вы имеете введу внести изменения в первоначальный код JS в моем посте или речь идет о примере ajaxSubmit в первой ссылке?
  • Указать уникальный id для множества форм в одной странице?

    @nurzhannogerbek Автор вопроса
    Павел Аксенов: Можете если вам не трудно в виде кода привести пример, чтобы было более понятнее. Мне кажется я не до конца уловил суть.