@NadiiaN

Как получить список выбранных элементов на html странице в action?

Здравствуйте, у меня возникла такая проблема
Суть в том, что у меня на странице будет отображаться список групп, примерно таким способом
60146c9245ccc377626124.png

А также будет возможность выбрать данную группу и далее в action идет обработка именно id выбранных групп

Вот мой код:

Модель
class Groups(models.Model):
    id_group = models.IntegerField() {#это дополнительное нужное поле, не то, которое является ключевым в таблице бд#}
    name = models.CharField('Название группы', max_length=50)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Группа'
        verbose_name_plural = 'Группы'


Форма
class GroupsForm(ModelForm):
    class Meta:
        model = Groups
        fields = ['id_group', 'name']

        widgets = {
            "id_group": TextInput(attrs={
                'class': 'input100'
            }),
            "name": TextInput(attrs={
                'class': 'input100'
            }),
        }


Форма на html странице
<form method="post" class="contact_form" name="contact_form" id="contact">
        {% csrf_token %}
        <div>
  <div style="margin: 5%;" class="btn-group" id="group_main">
            {% for el in list_info %} {# здесь отображение групп, в list_info хранятся id групп #}
<div style="position: relative; width: 200px; height: 100px">
                    <button id="{{ el.id_group }}" class="btn_check_group">
                        <div style="position: absolute; top: 0; left: 0; width: 200px">
                            <img src="{% static 'main/images/pr.png' %}" alt="..."/>
                        </div>
                        <div>
                            {{ el.name }}
                        </div>
                    </button>
                </div>
            {% endfor %}
        </div>
    </form>


View
def send_message(request):
    all_info = Groups.get_id_groups()
    list_info = list(all_info)
    if request.method == 'POST':
        form = MessageForm(request.POST)
...
 form = MessageForm()

    data = {
        'form': form,
        'list_info': list_info,
    }
    return render(request, 'main/send_message.html', data)


Я пробовала через ajax (создала обработчик при клике на кнопку, в котором добавляется id в массив, а далее массив отправляется через ajax)
<script>
        var selected_groups = [];
...
$("#contact").submit(function (e) {
            e.preventDefault();
            e.stopPropagation();
            const data = $('form').serializeArray();
            $.ajax({
                type: 'POST',
                url: 'http://127.0.0.1:8000/main/', {# я также еще не разобралась как правильно указывать url #}
                data: {'data': data, 'selected_groups': selected_groups},
                dataType: 'json',
            });


Но в таком случае не отправляется сам список, + возникает проблема с csrf_token

В общем, подскажите пожалуйста как все таки получить список выбранных групп в action, хотя бы в каком направлении идти, я впервые создаю проект на Python и впервые использую Django, поэтому возможно много чего не правильно
Буду благодарна за любую подсказку, заранее спасибо)))
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ответы на вопрос 1
@siarheisiarhei
вот тебе формула
city_notes_choice = forms.ModelChoiceField(
        queryset=City.objects.all(),
        widget=forms.RadioSelect,
        to_field_name="name",
        empty_label="choose",
    )

по ней конвертируй форму(html) и делай с ней что тебе нужно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы