2009-04-29 15 views
44

PHP के समकक्ष Django समकक्ष, मैं इसे name को सरणी के रूप में प्राप्त करने के लिए ऐसा करूंगा।PHP के फॉर्म वैल्यू एरे/एसोसिएटिव सरणी

<input type"text" name="name[]" /> 
<input type"text" name="name[]" /> 

या अगर मैं एक साहचर्य सरणी के रूप में name प्राप्त करना चाहता था:

<input type"text" name="name[first]" /> 
<input type"text" name="name[last]" /> 

ऐसी बातों के लिए Django बराबर क्या है?

उत्तर

61

Check out the QueryDict documentation, विशेष रूप से QueryDict.getlist(key) का उपयोग।

के बाद से request.POST और request.GET ध्यान में रखते हुए QueryDict के उदाहरण हैं, तो आप ऐसा कर सकते हैं:

<form action='/my/path/' method='POST'> 
<input type='text' name='hi' value='heya1'> 
<input type='text' name='hi' value='heya2'> 
<input type='submit' value='Go'> 
</form> 

फिर कुछ इस तरह:

def mypath(request): 
    if request.method == 'POST': 
     greetings = request.POST.getlist('hi') # will be ['heya1','heya2'] 
+17

जब कुंजी महत्वपूर्ण होती है तो यह विफल हो जाती है। उदाहरण के लिए नाम = "प्रश्न [4]" जहां 4 प्रश्न आईडी है। – Pawka

5

Django एक तरीका प्रदान नहीं करता है अनुरोध ऑब्जेक्ट से सहयोगी सरणी (पायथन में शब्दकोश) प्राप्त करने के लिए। जैसा कि पहले उत्तर की ओर इशारा किया गया है, आप आवश्यकतानुसार .getlist() का उपयोग कर सकते हैं, या एक ऐसा फ़ंक्शन लिख सकते हैं जो QueryDict ले सकता है और इसे अपनी पसंद के अनुसार पुनर्गठित कर सकता है (उदाहरण के लिए कुंजी key[*] पैटर्न से मेल खाता है तो कुंजी/मूल्य जोड़े खींचना)।

18

इसे खोदने के लिए खेद है, लेकिन Django के पास utils.datastructures.DotExpandedDict है। यहां इसके दस्तावेज़ों का एक टुकड़ा दिया गया है:

>>> d = DotExpandedDict({'person.1.firstname': ['Simon'], \ 
     'person.1.lastname': ['Willison'], \ 
     'person.2.firstname': ['Adrian'], \ 
     'person.2.lastname': ['Holovaty']}) 
>>> d 
{'person': {'1': {'lastname': ['Willison'], 'firstname': ['Simon']}, '2': {'lastname': ['Holovaty'], 'firstname': ['Adrian']}}} 

एकमात्र अंतर आप ब्रैकेट के बजाय डॉट का उपयोग करते हैं। मुझे लगता है कि अब यह स्वरूप रूपों में प्रीफिक्स्ड रूपों के साथ अवधारणात्मक रूप से प्रतिस्थापित किया गया है, लेकिन कक्षा को कोडबेस में छोड़ दिया गया है।

+0

यह मुझे मिला सबसे अच्छा समाधान है। धन्यवाद। – Pawka

+2

मैं अपने Django ऐप्स में DotExpandedDict पर भरोसा करता हूं, और यह QueryDict.getlist से कहीं अधिक उपयोगी है। दुर्भाग्यवश, इसे Django (कम से कम विकास संस्करण) से हटा दिया गया है। आप अभी भी [इसके लिए स्रोत कोड ले सकते हैं] (https://github.com/django/django/commit/c57abd3c29cedcca00821d2a0d5708f10977f3c6#django/utils/datastructures.py), हालांकि। – Matt

+2

dotExpandedDict को django 1.5 के बाद हटा दिया गया है – lolesque

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