在为我的网络应用开发搜索过滤器时遇到了一个问题。我需要过滤器的一个字段作为自动填充字段,但不幸的是,它无法按预期工作。当我在此字段中键入smth时,尽管它必须显示一些选项,但它什么也不显示。 我在该字段中使用Bootstrap,该类为“ basicAutoComplete”,并且如您在下面的图片中所见(请不要注意字段的错误位置),没有显示任何信息。但是,如果我删除“ basicAutoComplete”,那么我的所有建筑物都将显示在下拉列表中,如第二张图片所示。 有人可以告诉我如何解决吗?
这是我的代码:
views.py
def device_rooms_search(request):
device_rooms = DeviceRooms.objects.all()
deviceRoomsFilter = DeviceRoomsFilter(request.GET, queryset=device_rooms)
device_rooms = deviceRoomsFilter.qs
builds = Buildings.objects.all()
context = {'device_rooms_list': device_rooms, 'deviceRoomsFilter': deviceRoomsFilter}
return render(request, "database/device_rooms/device_rooms_search.html", context)
filters.py
class DeviceRoomsFilter(df.FilterSet):
name = df.CharFilter(field_name='room_number', lookup_expr='icontains')
descr = df.CharFilter(field_name='description', lookup_expr='icontains')
class Meta:
model = DeviceRooms
fields = ['name', 'facility_id', 'building_id', 'device_room_type', 'descr']
models.py
class DeviceRooms(models.Model):
id = models.CharField(max_length=7, primary_key=True)
room_number = models.CharField(max_length=30, unique=True)
device_room_type = models.ForeignKey(DeviceRoomTypes, on_delete=models.CASCADE)
building_id = models.ForeignKey(Buildings, on_delete=models.CASCADE)
facility_id = models.ForeignKey(Facilities, on_delete=models.CASCADE)
description = models.CharField(max_length=200, null=True)
search.html
<form method="get" action="">
{% csrf_token %}
<div style="text-align: center">
{% for field in deviceRoomsFilter.form %}
{% if field.name == 'name' %}
Room name: {{ field }}
{% endif %}
{% if field.name == 'facility_id' %}
Facility: {{ field }}
{% endif %}
{% if field.name == 'building_id' %}
Building: {% render_field field class="basicAutoComplete form-control col-md-2 offset-md-5" %}
{% endif %}
{% if field.name == 'device_room_type' %}
Room type: {{ field }}
{% endif %}
{% if field.name == 'descr' %}
Description: {{ field }}
{% endif %}
{% endfor %}
</div>
</form>
<script>
$('.basicAutoComplete').autoComplete( {minLength: 1} );
$('.dropdown-menu').css({'top': 'auto', 'left': 'auto'});
</script>