Отправить значение select из шаблона в форму django

У меня есть модель группы:

class Group(models.Model):
   leader = models.ForeignKey(User, on_delete=models.CASCADE)
   name = models.CharField(max_length=55)
   description = models.TextField()
   joined = models.ManyToManyField(User, blank=True)

и форма для обновления указанной группы:

class UpdateGroup(UpdateView):
    model = Group
    form_class = UpdateGroupForm
    template_name = 'update_group.html'

    def form_valid(self, form):
        group = form.save()
        return HttpResponseRedirect(reverse('user_detail', args=[str(group.pk)]))

Я хочу, чтобы leader группы имел возможность передать свое лидерство другому члену, имеющему joined. В моем шаблоне UpdateUser у меня есть две кнопки:

<form method="POST">
    {% csrf_token %}
    {{form.as_p}}
    <button type="submit" name="update">UPDATE</button>
    <select>
    {% for member in group.joined.all %}
        {% if member != group.leader%}
            <option value={{ member }}>{{ member }}</option>
        {% endif %}
    {% endfor %}
    </select>
    <button type="submit" name="change_leader">CHANGE LEADER</button>
</form>

Фронтенд работает здесь, и он отображается так, как я хочу, единственная проблема теперь в том, как мне отправить обновление для группы с помощью кнопки UPDATE и только для leader группы с помощью кнопки CHANGE LEADER?

Нужны ли мне две разные формы? Я бы хотел, чтобы кнопка CHANGE LEADER обновляла форму и возвращала в представление GroupDetail, но только если эта кнопка нажата. То есть, если по ошибке лидер нажал одну из кнопок <option value={{ member }}>{{ member }}</option>, но нажал UPDATE вместо CHANGE LEADER, лидер группы не будет изменен.

В итоге я пошел совершенно другим путем. Добавил новое представление, форму и url для смены лидера группы. Затем в шаблоне change_leader.html я сделал следующее:

<form method="POST">
    {% csrf_token %}
    {{form.as_p}}
    <select id="newLeaderSelect">
    {% for member in group.joined.all %}
        {% if member != group.leader%}
            <option id='newLeader' value={{ member.id }}>{{ member }}</option>
        {% endif %}
    {% endfor %}
    </select>
    <button>CHANGE LEADER</button>
    {{form.errors}}
</form>

<script>
    let leader = document.getElementById('leader')
    let newLeaderSelect = document.getElementById('newLeaderSelect')
    leader.value = newLeaderSelect.value
    
    newLeaderSelect.onchange = () => {
        leader.value = newLeaderSelect.value
    }
</script>

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

Вернуться на верх