【问题标题】:Django AJAX: Errors When Trying To Pass A List In POST RequestDjango AJAX:尝试在 POST 请求中传递列表时出错
【发布时间】:2021-05-25 04:57:29
【问题描述】:

我正在尝试将列表传递给视图,以便我可以按该列表进行过滤。我从另一个 Stack Overflow 问题 here 中获得了一些想法,它应该可以工作,但给了我一些错误。

下面显示的尝试 1 打印为空数组 []

下面显示的尝试 2 给出错误 the JSON object must be str, bytes or bytearray, not NoneType

ajax 代码控制台日志error Array [1] 所以列表在那里工作

编辑:我知道错误是传递的数据是 NoneType,这意味着没有传递包含内部值的列表。我从 AJAX 调用中收到错误日志,所以那里一定有错误。谁能指出我错在哪里?

这里是代码

查看

def find(request):

    Posts = Post.objects.all()

    genre_list = Genres.objects.all()

    if request.method == 'POST':

        #attempt 1
        genres_selected_use = request.POST.getlist('genres_selected') # this when printed shows an empty array []
    
        #attempt 2
        #genres_selected_use = json.loads(request.POST.get('genres_selected')) # this gives error *the JSON object must be str, bytes or bytearray, not NoneType*

        for arg in genres_selected_use:
            Posts = Posts.filter(genres=arg)
        print(genres_selected_use)
        #return redirect('find')

    context = {
        'products': Posts,
        'keyword_list': Keywords.objects.all(),
    }

    return render(request, 'find/find.html', context)

AJAX

$('.filter_form').submit(function(e){
    const url = $(this).attr('action')

    var genres_selected_initial = [];
            
    var genre_item = document.getElementById(`filter_idAction`);
    var genres_selected_id = $(genre_item).attr('value');
    var g = parseInt(genres_selected_id)

    if  (genre_item.classList.contains("clicked_filter")) {
        genres_selected_initial.push(g);
    }

    //var genres_selected = genres_selected_initial; //attempt 1
    
    var genres_selected = JSON.stringify(genres_selected_initial); //attempt 2

    $.ajax({
        type: 'POST',
        url: url,
        data: {
            'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val(),
            'genres_selected': genres_selected,

                    
        },
        success: function(response){
            console.log(genres_selected)
        },
        error: function(response){
            console.log('error', genres_selected)
        }

    })

})

表格

<form class="filter_form" action="{% url 'find' %}" method="POST">
    {% csrf_token %}
    #rest of form
</form>

我猜有一个简单的解决方法?

【问题讨论】:

    标签: python django ajax django-views django-forms


    【解决方案1】:

    尝试使用request.POST.getlist('genres_selected', request.POST.getlist('genres_selected[]'))

    有时,ajax 字段会在给定列表时将“[]”附加到字段名称。

    【讨论】:

    • 感谢您的回复,但我仍然收到错误,我认为是 ajax 调用中的错误,因为它调用了错误函数而不是成功函数
    【解决方案2】:

    对于任何有类似问题的人

    通过添加e.preventDefault()解决了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多