There is a forms forms.py
class Event(forms.Form): choices = list(CHOICE_LEVEL) level = forms.ChoiceField(label='ТЕСТ УРОВНЯ:', choices=choices) title = forms.CharField(label='Заголовок Мероприятия:', widget=forms.Textarea) free_places = forms.IntegerField(label='Свободные места') roles = forms.ChoiceField(label='РОЛИ', choices='help here') Depending on the choice in level, you need to pass the list to roles This code was written in views.py:
class CreateEvent(View): @staticmethod def get(request, *args, **kwargs): level = request.GET.get('level') if level is not None: return HttpResponse(json.dumps({ 'error': "Field 'key' is required" }), content_type='application/json') data = [] admin_created_id = request.session.get('user') type_qs = StandingOrder.get_roles_list(type=Admin.get_type_by_id(admin_created_id=admin_created_id['admin_in_user_id']), level=level) for item in type_qs: if item['title'] not in data: data.append(item['title']) return HttpResponse(json.dumps({"data": data}), content_type="application/json") # form = Event() # return render(request, 'main_app/create_event.html', context={'form': form}) @staticmethod def post(request): form = Event(request.POST) if form.is_valid(): admin_created_id = request.session.get('user') form.save(admin_created_id['admin_in_user_id']) return redirect('/profile') else: form.add_error(None, 'Введите корректные данные.') return render(request, 'main_app/create_event.html', context={'form': form}) Here is a template with ajax create_event.html:
{% extends 'wrappers/wrapper.html' %} {% block title %} Создание мероприятия {% endblock %} {% block content %} {% load staticfiles %} <script src={% static 'ajax/create_role.js' %}></script> <center> <div class="form"> <form action="{% url 'create_event' %} method='post' "> {% csrf_token %} {% for fields in form %} <div class="form-group"> {{ fields.label }} <br> {{ fields }} {% if fields.errors %} <div class="alert alert-danger"> {{ form.errors }} </div> {% endif %} </div> {% endfor %} <button type="submit" class="btn btn-primary">Создать мероприятие.</button> </form> </div> </center> {% endblock %} The ajax create_role.js itself:
$(document).on('change', '#idOfKeyDropdown', function() { var chosenLevel = $(this).children("option:selected").val(); var data = {"level": chosenLevel}; $.ajax({ url: "create_event", type: "GET", data: data, dataType: "json", success: function(response) { if (response.data) { var valueDropdown = $('#idOfValueDropdown'); // empty value dropdown and add options valueDropdown.empty(); for (var item of response.data) { valueDropdown.append('<option value=' + item + '>' + item + '</option>'); } } }, error: function(err) { // handle error here } }); }); I do not understand how, depending on the choice of level, pass the list to roles