2017-10-09 17 views
0

これは私のmodels.pyファイルです。Django同じデータテーブル内の複数のフィールド内の検索クエリ

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 

は、今私はだから私は結果を得た私は

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}) 

views.pyファイルを作成し、これは私のhtmlファイル

{% 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 %} 

あるなどcustomer_name, customer_mobile_no,customer_product_idなどのようなmuliple fiedsで検索しますPOSTメソッドを使用していて、customers = CustomerInfo.objects.get(pk=customerid) 1つのフィールドを検索したときに結果が得られましたが、データベースから複数の検索クエリを開始すると、私は情報を得ることができません。私はCustomerInfoモデル内の複数のフィールドを検索したいです。また、私は他の人たちに努力していたが働いていなかった。

答えて

1

複数のフィールドを1つのクエリで検索する必要があります。あなたのコードを見て、私は条件がORを使用して結合されていると推測します。

この問題は、それはあなたが一緒にチェーン複数のフィルタリング条件にされませんし、それらを論理的に接続することができますどのようなdjango ORM's Q object

を使用して解決することができます。あなたは3つの条件を持っているし、彼らは論理的に接続されている場合

ので、: Condition 1 OR Condition 2 AND Condition 3Qを使用して、あなたがそれらを書くことができますように:

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

あなたのケースではフィルタリングの3種類の検索がように行うことができる:私は任意の番号で検索すると、すべてが大丈夫だった

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

。しかし、私は文字列で検索するとエラーが発生します –

+0

'pk'は整数で、残りのフィールドは' CharField'です。したがって、適切な型変換を適用する必要があります。これを答えに加えました。 –

関連する問題