【发布时间】:2021-10-31 19:51:41
【问题描述】:
我想通过 Ajax 使用我的输入字段的值动态过滤我的 querySet。
现在我正在尝试这样的事情:
模板:
<div class="card mt-3">
<div class="card-body">
<form action="" form="get">
<input data-url="{% url 'klantbeheer' %}" class="zoekklanten" name="q" type="text" placeholder="Zoek op contactnaam...">
</form>
{% if object_list %}
<div class="single-table">
<div class="table-responsive">
<table class="table text-center">
<thead class="text-uppercase bg-dark">
<tr class="text-white">
<th scope="col">Bedrijfsnaam</th>
<th scope="col">Contactnaam</th>
<th scope="col">Locatie</th>
<th scope="col">Actie</th>
</tr>
</thead>
<tbody>
{% for user in object_list %}
<tr>
<td>{{ user.bedrijfsNaam }}</td>
<td>{{ user.contactNaam }}</td>
<td>{{ user.adres }}</td>
<td>
<a href="{% url 'klantupdaten' user.id %}"><i class="fas fa-edit"></i></a>
<a href="#" data-url="{% url 'klantverwijderen' user.id %}" class="deletegebruiker" data-bs-toggle="modal" data-bs-target="#dynamic-modal"><i class="fas fa-trash-alt"></i></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% else %}
<p>Geen gebruikers gevonden</p>
<p>
<a href="{% url 'klantaanmaken' user.id %}" class="btn btn-primary">Maak klant aan</a>
</p>
{% endif %}
</div>
</div>
查看:
class ManageUserView(SuperUserRequired, ListView):
model = User
template_name = 'webapp/klant/beheerklant.html'
#Query based upon contactName
def get_queryset(self, query):
#Contactnaam bevat QUERY EN superuser is vals.
object_list = self.model.objects.filter(contactNaam__icontains=query).exclude(is_superuser=True)
return object_list
def post(self, request, *args, **kwargs):
query = self.request.POST.get('query', '')
print(query)
self.get_queryset(query)
jquery:
$('.zoekklanten').on('keyup', function(){
var url = $(this).data('url')
var query = $(this).val();
$.ajax({
url:url,
type:'POST',
data:{
'query':query
},
dataType: 'json',
beforeSend: function(xhr, settings){
if(!csrfSafeMethod(settings.type) && !this.crossDomain){
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
},
success: function(result){
},
error: function(data){
}
})})
我收到“get_queryset() 缺少 1 个必需的位置参数:‘query’”错误。我认为在 post 请求函数中调用 get_queryset 函数不是解决这个问题的方法。
在 Django 中使用 Ajax 动态过滤的最佳方法是什么?
【问题讨论】:
-
您的代码真的如上所示缩进了吗?如果是这样,您必须缩进
post()和get_queryset(),以便它们嵌套在ManageUserView类中。如果它们已经嵌套在那里,请修复代码缩进。 -
不,不是,我修复了缩进。
标签: javascript jquery django