Django Search query within multiple fields in same data table

佐手、 提交于 2021-02-19 08:27:10

问题


This is my models.py file.

class CustomerInfo(models.Model):
    customer_name=models.CharField('Customer Name', max_length=50)
    customer_mobile_no = models.CharField('Mobile No', null=True, blank=True,max_length=12)
    customer_price=models.IntegerField('Customer Price')
    customer_product_warrenty = models.CharField('Product Warrenty',null=True, blank=True,max_length=10)
    customer_sell_date = models.DateTimeField('date-published', auto_now=True)
    customer_product_id=models.CharField('Product ID',max_length=150,null=True, blank=True)
    customer_product_name=models.CharField('Product Name', max_length=50)
    customer_product_quantity=models.IntegerField('Quantity',default=1)


    def __str__(self):
        return self.customer_name

Now I want to search in muliple fieds like as customer_name, customer_mobile_no,customer_product_id etc. So I created views.py file

def customerPage(request):
    customers = CustomerInfo.objects.all()

    if request.method =="GET":
       customerid = request.GET['customer_id']

       try:
           customers = CustomerInfo.objects.get(pk=customerid)
           cus_name = CustomerInfo.objects.filter(customer_name__contains=customerid)
           mobile_number = CustomerInfo.objects.filter(customer_mobile_no__contains=customerid)



           return render(request, 'shop/customer.html', {"cus_name": cus_name,"mobile_number": mobile_number, "customers": 'customers', "site_name": "Moon Telecom"})
       except:
           return render(request, 'shop/customer.html', {"error": "Not found any info"})

    return render(request, 'shop/customer.html', {'customers': customers})

and this is my html file

{% extends "shop/base.html" %}

{% block content_area %}

<div class="col-lg-4">
    <div class="customer_search" >
        <form action="{% url "shop:customerPage" %}" method="GET">
            {% csrf_token %}
            <div class="form-group">
                <label for="customer_id">Id:</label>
                <input type="text" class="form-control" id="customer_id" placeholder="Enter customer ID" name="customer_id">
            </div>
            <button type="submit" class="btn btn-default">Submit</button>
        </form>
    </div>
</div>

<div class="col-lg-8 customers_info">
    {% if error %}
    <div class="alert alert-danger">
        <strong>{{error}}</strong>
    </div>
    {% endif %}



{% if cus_name %}

    {% for x in cus_name  %}
    <p>{{x.customer_name}}</p>
    {% endfor %}
{% else %}
<p>nothing foung</p>
{% endif %}


{% if customers %}
    <table class="table">
        <thead>
            <tr>
                <th>Name</th>
                <th>Mobile No</th>
                <th>Product Name</th>
                <th>Price</th>
                <th>Date</th>
                <th>Product ID</th>
                <th>Warrenty</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><a href="/shop/{{customers.id}}/customerprofile">{{customers.customer_name}}</a></td>
                <td>{{customers.customer_mobile_no}}</td>
                <td>{{customers.customer_product_name}}</td>
                <td>{{customers.customer_price}} TK</td>
                <td>{{customers.customer_sell_date}}</td>
                <td>{{customers.customer_product_id}}</td>
                <td>{% if customers.customer_product_warrenty == '' %}
                <b>No Warrenty</b>
                {% else %}
                 <b>{{customers.customer_product_warrenty}}</b> Month
                {% endif %}
                </td>

            </tr>
        </tbody>
    </table>
     {% else %}
    <p>nothing found</p>
    {% endif %}


</div>



{% endblock  %}

I got results If I use POST method and customers = CustomerInfo.objects.get(pk=customerid) When I searched one field, I have got my results but When I start multiple search query from the database. I cant get any info. I want to search multiple fields within CustomerInfo model. Also, I was trying others mehtod but not working.


回答1:


You need to search using multiple fields in one query. And looking at your code, i presume that the conditions are joined using OR.

This problem can be solved using django ORM's Q object

What it allows you do is to chain multiple filtering conditions together and connect them logically.

So, if you have 3 conditions and they are logically connected as : Condition 1 OR Condition 2 AND Condition 3 using Q you can write them as :

Q(Condition1) | Q(Conditon2) & Q(Condition2).

In your case the 3 different searches of filterings can be performed as:

filtered_customers = CustomerInfo.objects.filter( Q(pk = int(customerid)) | Q(customer_name__contains = str(customerid)) | Q(customer_mobile_no__contains = str(customerid)))


来源:https://stackoverflow.com/questions/46656210/django-search-query-within-multiple-fields-in-same-data-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!