Невозможно получить совпадающие данные в фильтре поиска в Django
Я хотел применить фильтр поиска в Django, который покажет соответствующую строку таблицы в HTML. Я сохранил данные, которые поступают из конечной точки API, в базе данных и создал несколько полей, на основе которых он будет фильтровать данные API в таблице.
Вместо поиска совпадающего значения добавляется еще один столбец с искомым значением. Например: Если я ищу "vendorname" как Pepsi, это должно отразить строку таблицы, содержащую Pepsi, а не создавать еще один столбец со значением Pepsi.
Я не знаю, где я ошибаюсь. У меня много столбцов из API и 6filter, просто я добавил несколько только здесь. Заранее спасибо
Я создал две базы данных здесь одна для фильтра другая для данных API:
models.py:
//filter
class Userbase(models.Model):
Vendor_Name = models.CharField(max_length=255, null=True)
Region = MultiSelectField(choices=CHOICES)
Area = MultiSelectField(choices=AREACHOICES)
//api data
class invoiceapi(models.Model):
Vendor_Name = models.CharField(max_length=155, null=True)
area = models.CharField(max_length=155, null=True)
country = models.CharField(max_length=155, null=True)
views.py:
def homeview(request):
userb = Userbase.objects.all()
table_data= requests.get('http://127.0.0.1:1500/api/').json()
if request.method == 'POST':
userb = Userbase()
userb.Area = request.POST.getlist('Area')
userb.country = request.POST.getlist('country')
userb.Vendor_Name = request.POST.get('Vendor_Name')
userb.save()
# api data saving in db
for new_data in table_data:
data = {
'area': new_data['area'],
'country': new_data['country'],
'VendorName': new_data['VendorName'],
}
user = invoiceapi.objects.create(**data)
user.save()
//search filter
if request.method == 'POST':
finder = request.POST['Vendor_Name']
invoiceuser = invoiceapi.objects.filter(PBK_Desc__iexact=finder)
print(invoiceuser)
print(finder)
return render(request, 'home.html',
{'userb':userb,'table_data':table_data,'finder':finder})
return render(request, 'home.html', {'userb':userb,'table_data':table_data})
html:
<form action=" " method="POST" autocomplete="off">
{% csrf_token %}
<div class="row">
<div class="row" id="row_id">
<br>
<div style="margin-left: 19px; font-size: 17px;">Payment Term</div>
<div class="row" id="id_row">
<input type="text" name="Vendor_Name" maxlength="255" class="form-control mb-3"
style="margin-left: 30px; " placeholder="Vendor_Name" id="Vendor_Name" required=""">
</div>
<br>
<br>
<input type="submit" value="Apply" id="btn_submit" style=" width:90px; height:45px; margin-left: 40px; margin-bottom: 30px;"
class="btn btn-success btn" >
<input type="reset" value="Reset" id="btn_submit" style=" width:90px; height:45px;margin-left: 65px; margin-bottom: 30px;"
class="btn btn-success btn">
</div>
</form>
</div>
</div>
<div class='container-l' id='table-wrapper' style="height:330px;width:100.5%; ">
<div id='container-table'style="height: 1050px;">
{% if userb %}
<table class="table table-striped border datatable" id='table_id'>
<thead>
<thead id="tablehead">
<tr>
<th> Area </th>
<th> Country </th>
<th> VendorName </th>
</tr>
</thead>
<tbody>
{% for list in table_data %}
<tr>
<td>{{list.area}}</td>
<td>{{list.country}}</td>
<td>{{finder}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</div>
{% endif %}