Django запрос в виде массива строк из формы с флажками

Я хотел бы получить несколько входных данных из формы с флажками и затем отфильтровать их из моей базы данных. Это было бы что-то похожее на:

http://127.0.0.1:8000/data/?class_type=[class_C,class_M]

Однако из запроса я получаю следующее:

http://127.0.0.1:8000/data/?class_type=class_C&class_type=class_M

Вот как это закодировано в .html:

Data class <br> 
<div class="form-check">
    <input class="form-check-input" type="checkbox" value="class_C" id="class_C" name="class_type">
    <label class="form-check-label" for="class_C">
        C
    </label>
</div>

<div class="form-check">
    <input class="form-check-input" type="checkbox" value="class_M" id="class_M" name="class_type">
    <label class="form-check-label" for="class_M">
        M
    </label>
</div>

<div class="form-check">
    <input class="form-check-input" type="checkbox" value="class_X" id="class_X" name="class_type">
    <label class="form-check-label" for="class_X">
        X
    </label>
</div> 

В views.py:

data_class = request.GET.get('class_type')

 [...]

if data_class == "class_C":
    database = database.filter(class_l__contains = "C")
elif data_class == "class_M":
    database = database.filter(class_l__contains = "M")
elif data_class == "class_X":
    database = database.filter(class_l__contains = "X")

Любая помощь будет оценена по достоинству! Спасибо!

Вы можете получить список с помощью .getlist(…) [Django-doc]:

from django.db.models import Q

data_classes = request.GET.getlist('class_type')

acceptable_values = {'class_C', 'class_M', 'class_X'}

if all(data_class in acceptable_values for data_class in data_classes):
    query = Q(*[Q(('class_l_contains', value)) for value in data_classes])
    database = database.filter(query)
Вернуться на верх