Django: как подключить настраиваемый url к методу GET

Я хочу реализовать метод поиска, который принимает в качестве фильтров свойства, выбранные пользователем на стороне front-end. URL, который я хочу создать, будет выглядеть примерно так:

urls.py:

urlpatterns = [
    path('', views.get_data),
    path(r'^find/<property>/<filter>/<value>', views.filter_view)
]

Где

<property> - значение (1-9), выбранное из:

<div class="dropdown-wrapper" style="padding-left: 0px">
                             <select class="dropdown" id="select-properties-dropdown">
                                 <option class="property" value="0">Select property</option>
                                 <option class="property" value="1">GID</option>
                                 <option class="property" value="2">Type</option>
                                 <option class="property" value="3">Province</option>
                                 <option class="property" value="4">Street</option>
                                 <option class="property" value="5">House number</option>
                                 <option class="property" value="6">Postcode</option>
                                 <option class="property" value="7">City</option>
                                 <option class="property" value="8">Municipality</option>
                             </select>
</div>

<filter> - это значение из:

<div class="dropdown-wrapper" >
                     <select class="dropdown">
                         <option class="property" value="0">Contains</option>
                         <option class="property" value="1">Equal to</option>
                         <option class="property" value="2">Ends with</option>
                         <option class="property" value="3">Starts with</option>
                     </select>

</div>

и <value> взято из панели поиска:

<div class="dropdown-wrapper">
                <form action="find" method="GET">
                     <input class="input searchbar" type="text"
                            aria-autocomplete="list"
                            aria-expanded="false"
                            id="searchBar"
                            style="height: 28.5px"
                     >
                    <button type="submit"><i class="fa fa-search"></i>
                    </button>
                </form>


</div>

Используйте django forms. У них есть widget, которые эмулируют <select>. В дальнейшем вы можете использовать форму в django CBVs как FormView и добавить свою собственную функциональность, просто переопределив метод form_valid().

from django import forms

PROPERTY_CHOICES = [    
    ('1', 'GID'),
    ('2', 'Type'),
    ('3', 'Province'),
    #...
    ]
FILTER_CHOICES = [
    ('0', 'contains'),
    ('1', 'Equal'),
    ('2', 'Ends'),
    ('3', 'Starts'),
    #...
]

class PropertyForm(forms.Form):
    property = forms.CharField(widget=forms.Select(choices=PROPERTY_CHOICES, attrs={'class': 'property'}))
    filter = forms.ChoiceField(choices=FILTER_CHOICES) # uses the select widget
    value = forms.CharField()
Вернуться на верх