2016-05-12 79 views
0

我創建了三個選項(主頁,更改密碼和註銷)的菜單。在家中,我顯示了存儲在數據庫中的所有書籍。現在我想使用複選框根據書籍的類別過濾內容。默認情況下,所有圖書都會在過濾分類時顯示,但只顯示該分類的圖書。但對於我來說,即使點擊所有複選框(複選框包含分類),它也會顯示所有圖書。我認爲存在一些問題在我的模板文件中。如何從django模板中定義的複選框檢索值

urls.py,

url(r'^welcome_user/$',views.welcome_user, name='welcome_user'), 

Models.py,

class Add_cat(models.Model): 
    category = models.CharField("Name",max_length=25,unique=True) 

    def __unicode__(self): 
     return u'{0}'.format(self.category) 

class Add_prod(models.Model): 
    book = models.CharField("Book Name",max_length=40) 
    author = models.CharField("Author",max_length=30) 
    price = models.PositiveIntegerField("Price") 
    image = models.ImageField(upload_to='images',null=True) 
    cat = models.ForeignKey(Add_cat,on_delete=models.CASCADE) 

模板文件,

{% block content %} 
{% load staticfiles %} 
<head> 
<link rel="stylesheet" href="{% static 'style.css' %}"> 
</head> 
<body> 
<div class="box"> 
    <div class="sideNav"> 
     <form action="{% url 'welcome_user' %}"> 
      <p id=id3>Categories</p> 
      <hr> 
      {% for i in products %} 
       <input type="checkbox" name="cat_name" value="{{i.cat}}">{{i.cat}}<br> 
      {% endfor %} 
     <button type="submit">Submit</button> 
     </form> 
    </div> 
    <div> 
     {% for i in products %} 
      <div style="display:inline-block;margin:30px"> 
       <img src="{{i.image.url}}" alt="No Image" width=196px height=196px> 
       <p id=id4>Rs.{{i.price}}</p> 
      </div> 
     {% endfor %} 
    </div> 
</div> 
</body> 
{% endblock %} 

Views.py,

@login_required 
def welcome_user(request):  
    if 'cat_name' in request.GET: 
     filter_category = request.GET.getlist('cat_name') 
     my_products = Add_prod.objects.filter(cat__in=filter_category) 
     context = { "products":my_products} 
    else: 
     my_products = Add_prod.objects.all()  
     context = { "products":my_products} 
return render(request,"welcome-user.html",context) 

回答

1

檢查是否checbox值在發送表格,您應符合以下條件去

if 'cat_name' in request.GET: 
     #checkbox has been checked 
    else: 
     #it is not checked 

記住in運營商回報boolean所以你也可以做

filter_category = 'cat_name' in request.GET 

中獲取價值,你只需要獲取值的「cat_name」鍵,如:

value = request.GET['cat_name'] 

檢查它是否在GET參數或不

+0

嘿模板只在點擊主菜單時纔會調用。當我點擊任何類別的模板時不會被調用 – Bhanukiran

+0

如何做濾波器呢?你使用任何js函數嗎?你必須爲做這個過濾器做一些操作。您可以使用基於複選框選擇的js代碼執行此過濾器,或者您必須調用後端服務以獲取過濾響應。 – Anoop

0

我認爲,所有你需要做的就是添加__in到您的過濾器:

@login_required 
def welcome_user(request):  
    filter_category = request.GET.getlist('cat_name') 
    categories = Add_cat.objects.all() 
    if filter_category: # I couldn’t decipher the structure of an `Add_cat`, so I left off the `in` check since it would not work for lists 
     print filter_category 
     my_products = Add_prod.objects.filter(cat__in=filter_category) # the template implies that this field is `cat` and not `category` 
     context = { "products":my_products} 
    else: 
     my_products = Add_prod.objects.all() 
     context = { "products":my_products} 
    return render(request,"welcome-user.html",context) 
+0

嘿模板只在點擊主菜單時被調用。當我點擊任何類別複選框時,模板沒有被調用 – Bhanukiran

0

複選框工作從其他形式的投入一點點不同,所以如果檢查從包括一個複選框形式發過帖子,

如果複選框被選中,你的查詢集將是這樣的: 值將是「上」

所以,你必須檢查

if request.POST.get('cb1')=='on': 
     "item is selected" 
    else: 
     "item is not selected" 
+0

經過複選框字段我包括按鈕提交域這樣,\t now我得到這樣的404錯誤,http://127.0.0.1:8000/welcome_user/%20method%3D?cat_name=Economics – Bhanukiran

+0

我已經在問題中包含了我的url文件。我應該在url中進行任何更改嗎? – Bhanukiran

+0

添加方法=發佈在表單內,{%csrf_token%}裏面的表單內容然後它會直接發佈數據到您的意見 – 2016-05-12 12:36:55

0

嘗試此以下代碼 Add_prod.objects.filter(cat__in = filter_category)

@login_required 
def welcome_user(request):  
    filter_category = request.GET.getlist('cat_name') 

    if filter_category: 

     my_products = Add_prod.objects.filter(cat__in=filter_category) 
     context = { "products":my_products} 
    else: 
     my_products = Add_prod.objects.all() 
     context = { "products":my_products} 
    return render(request,"welcome-user.html",context) 

模板文件 「{welcome_user '%刪除%URL}從引號()'

<form method='get' action="{% url welcome_user %}"> 

UPDATE

加入報價之間views.welcome_user

網址。py

url(r'^welcome_user/$','views.welcome_user', name='welcome_user'), 
+0

我添加按鈕類型=「提交」後複選框field.I認爲現在它會尋找行動,但我沒有找到我的網頁找不到頁面。 \t http://127.0.0.1:8000/welcome_user/%20method%3D?cat_name=Economics – Bhanukiran

+0

網址看起來不對。 「welcome_user /%20method%3D?cat_name = Economics」它應該是「welcome_user /?cat_name = Economics」 – Anoop

+0

向我顯示您更新的模板文件 – Anoop

相關問題