Django equivalent of PHP's form value array/associative array

前端 未结 3 1081
甜味超标
甜味超标 2020-12-01 00:36

In PHP, I would do this to get name as an array.





        
相关标签:
3条回答
  • 2020-12-01 01:12

    Check out the QueryDict documentation, particularly the usage of QueryDict.getlist(key).

    Since request.POST and request.GET in the view are instances of QueryDict, you could do this:

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

    Then something like this:

    def mypath(request):
        if request.method == 'POST':
            greetings = request.POST.getlist('hi') # will be ['heya1','heya2']
    
    0 讨论(0)
  • 2020-12-01 01:32

    Django does not provide a way to get associative arrays (dictionaries in Python) from the request object. As the first answer pointed out, you can use .getlist() as needed, or write a function that can take a QueryDict and reorganize it to your liking (pulling out key/value pairs if the key matches some key[*] pattern, for example).

    0 讨论(0)
  • 2020-12-01 01:33

    Sorry for digging this up, but Django has an utils.datastructures.DotExpandedDict. Here's a piece of it's docs:

    >>> 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']}}}
    

    The only difference being you use dot's instead of brackets.

    EDIT: This mechanism was replaced by form prefixes, but here's the old code you can drop in your app if you still want to use this concept: https://gist.github.com/grzes/73142ed99dc8ad6ac4fc9fb9f4e87d60

    0 讨论(0)
提交回复
热议问题