【发布时间】: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