2015-04-18 8 views
5

मैं वर्तमान में काफी सरल django प्रोजेक्ट पर काम कर रहा हूं और कुछ मदद का उपयोग कर सकता हूं। यह सिर्फ एक साधारण डेटाबेस क्वेरी फ्रंट एंड है।Django चेक करें कि चेकबॉक्स चयनित है

वर्तमान में मैं चेक बॉक्स, रेडियो बटन आदि का उपयोग कर खोज को परिष्कृत करने पर अटक कर रहा हूँ

मुद्दा मैं पता लगाना है पता है कि कैसे जब एक चेकबॉक्स (या एकाधिक) का चयन किया गया हो रही है।

views.py

def search(request): 
    if 'q' in request.GET: 
     q = request.GET['q'] 
     if not q: 
      error = True; 
     elif len(q) > 22: 
      error = True; 
     else:   
      sequence = Targets.objects.filter(gene__icontains=q) 
      request.session[key] = pickle.dumps(sequence.query) 
      return render(request, 'result.html', {'sequence' : sequence, 'query' : q, 'error' : False})  
    return render(request, 'search.html', {'error': True}) 

search.html

<p>This is a test site</p></center> 

     <hr> 
     <center> 
      {% if error == true %} 
       <p><font color="red">Please enter a valid search term</p> 
      {% endif %} 
     <form action="" method="get"> 
      <input type="text" name="q"> 
      <input type="submit" value="Search"><br>    
     </form> 
     <form action="" method="post"> 
      <input type='radio' name='locationbox' id='l_box1'> Display Location 
      <input type='radio' name='displaybox' id='d_box2'> Display Direction 
     </form> 
     </center> 

मेरे वर्तमान विचार मैं जाँच करें कि जो चेक बॉक्स/रेडियो बटन का चयन किया और निर्भर हैं कर रहे हैं, है: मेरी कोड अब तक इस तरह के रूप है सही डेटा पूछेगा और एक टेबल में प्रदर्शित किया जाएगा।

तो विशेष रूप से: मैं कैसे जांचूं कि चेक-बॉक्स चेक किए गए हैं या नहीं?

class Tag: 
    published = BooleanField() 
    (...) 

टेम्पलेट में:

{% for tag in tags %} 
<label class="checkbox"> 
    <input type="checkbox" name="tag[]" value="" {% if tag.published %}checked{% endif %}> 
</label> 
{% endfor %} 

मान लें कि आप एक पोस्ट के रूप प्रपत्र भेज रहे हैं, चेकबॉक्स चयनित के मूल्यों और मैं views.py

+0

आप ग्राहक के वेब ब्राउज़र पर अजगर पर अमल नहीं कर सकते हैं और इसलिए आप इस JavaScript का उपयोग करने की आवश्यकता होगी। –

उत्तर

14

रेडियो बटन:

अपने रेडियो के लिए एचटीएमएल में बटन, आप एक ही नाम साझा करने के लिए सभी संबंधित रेडियो आदानों की जरूरत है एक पूर्वनिर्धारित "मूल्य" विशेषता है, और बेहतर, इस प्रकार एक आसपास के लेबल टैग है:

<form action="" method="post"> 
    <label for="l_box1"><input type="radio" name="display_type" value="locationbox" id="l_box1">Display Location</label> 
    <label for="d_box2"><input type="radio" name="display_type" value="displaybox" id="d_box2"> Display Direction</label> 
</form> 
फिर अपने ध्यान में रखते हुए

, आप देख सकते हैं जिसे POST डेटा में साझा "नाम" विशेषता की जांच करके चुना गया था। यह मूल्य HTML इनपुट टैग के जुड़े "मूल्य" विशेषता प्राप्त होगी है:

# views.py 
def my_view(request): 
    ... 
    if request.method == "POST": 
     display_type = request.POST.get("display_type", None) 
     if display_type in ["locationbox", "displaybox"]: 
      # Handle whichever was selected here 
      # But, this is not the best way to do it. See below... 

काम करता है यही कारण है कि, लेकिन यह मैनुअल जांच की आवश्यकता है। पहले Django फॉर्म बनाना बेहतर है। तब Django आप के लिए उन जांच कर देगा:

forms.py:

from django import forms 

DISPLAY_CHOICES = (
    ("locationbox", "Display Location"), 
    ("displaybox", "Display Direction") 
) 

class MyForm(forms.Form): 
    display_type = forms.ChoiceField(widget=forms.RadioSelect, choices=DISPLAY_CHOICES) 

your_template.html:

<form action="" method="post"> 
    {# This will display the radio button HTML for you #} 
    {{ form.as_p }} 
    {# You'll need a submit button or similar here to actually send the form #} 
</form> 

बार देखा गया।py:

from .forms import MyForm 
from django.shortcuts import render 

def my_view(request): 
    ... 
    form = MyForm(request.POST or None) 
    if request.method == "POST": 
     # Have Django validate the form for you 
     if form.is_valid(): 
      # The "display_type" key is now guaranteed to exist and 
      # guaranteed to be "displaybox" or "locationbox" 
      display_type = request.POST["display_type"] 
      ... 
    # This will display the blank form for a GET request 
    # or show the errors on a POSTed form that was invalid 
    return render(request, 'your_template.html', {'form': form}) 

स:

स इस तरह काम करते हैं:

forms.py:

class MyForm(forms.Form): 
    # For BooleanFields, required=False means that Django's validation 
    # will accept a checked or unchecked value, while required=True 
    # will validate that the user MUST check the box. 
    something_truthy = forms.BooleanField(required=False) 

views.py:

def my_view(request): 
    ... 
    form = MyForm(request.POST or None) 
    if request.method == "POST": 
     if form.is_valid(): 
      ... 
      if request.POST["something_truthy"]: 
       # Checkbox was checked 
       ... 

अतिरिक्त पठन:

https://docs.djangoproject.com/en/1.8/ref/forms/fields/#choicefield

https://docs.djangoproject.com/en/1.8/ref/forms/widgets/#radioselect

https://docs.djangoproject.com/en/1.8/ref/forms/fields/#booleanfield

+0

उत्तर के लिए बहुत बहुत धन्यवाद। मुझे लगता है कि मुझे चेकबॉक्स विधि के साथ काम करना होगा। लेकिन मुझे थोड़ा समझ है कि इसका उपयोग कैसे किया जाए। आपके तीसरे नेस्टेड आईएफ स्टेटमेंट के बाद, चेकबॉक्स का उपयोग करने के लिए मैं वास्तव में कैसे जा सकता हूं? उत्तर के लिए फिर से धन्यवाद, और कृपया मुझे धोखा दें क्योंकि मैं django के लिए नया हूं :) – user3496101

+0

चेकबॉक्स उदाहरण में, माईफॉर्म लेबल "कुछ सच्चाई" लेबल के साथ एक चेकबॉक्स प्रस्तुत करता है। My_view() में, request.POST ["something_truthy"] सही है अगर वह चेकबॉक्स चेक किया गया था, और यदि गलत नहीं है। –

+0

उत्तर के लिए धन्यवाद! मैं अब इस हिस्से को समझता हूं :) मेरे पास भी सवाल उठता है हालांकि अगर आप मुझे कुछ सलाह दे सकते हैं। मैंने मूल पोस्ट में संशोधन किया है। मेरा प्रश्न विशिष्ट कॉलम फ़िल्टर करने के बारे में है क्योंकि मैंने Google पर इसकी खोज की है और जो भी मैं ढूंढ रहा हूं उसे नहीं मिल सकता है। एक बार फिर धन्यवाद! – user3496101

5

पर इस जानकारी मॉडल में कैसे पारित करना अनुरोध में हैं। POST.getlist ('टैग')।

उदाहरण के लिए:

<input type="checkbox" name="tag[]" value="1" /> 
<input type="checkbox" name="tag[]" value="2" /> 
<input type="checkbox" name="tag[]" value="3" /> 
<input type="checkbox" name="tag[]" value="4" /> 

कहते हैं अगर 1,4 जाँच कर रहे थे,

check_values = request.POST.getlist('tag') 

check_values ​​शामिल होंगे [1,4] (उन मूल्यों कि जाँच कर रहे थे)

+2

यह उत्तर केवल तभी लागू होता है जब फ़ॉर्म से जुड़े मॉडल होते हैं, जो कि पूछे जाने वाले प्रश्न में मामला नहीं है। –

संबंधित मुद्दे