Python/Django - radiobutton с кнопкой submit вместо кнопок

У меня есть приложение Django, в котором я хочу иметь настройку: отправлять ли письмо автоматически или вручную. То, что у меня есть, работает, но не в том стиле, в котором я хочу.

На данный момент у меня есть 2 кнопки, на которые можно нажать, и настройки будут установлены на то, что вы хотите. Но я бы хотел иметь радиокнопки, которые также уже установлены или сняты в зависимости от настройки.

Что я имею сейчас:

model.py

class AutoSendMail(models.Model):
    auto = models.BooleanField(default=False)
    manual = models.BooleanField(default=True)
    send_type = (
        ('manual', 'MANUAL'),
        ('auto', 'AUTO')
    )
    type = models.CharField(max_length=6, choices=send_type, default="manual")

forms.py

CHOICES = [('manual', 'MANUAL'),
        ('auto', 'AUTO')]

class SendMailSetting(ModelForm):
    class Meta:

        model = AutoSendMail
        fields = ['auto', 'manual', 'type']
        widgets = {
            "manual": forms.RadioSelect(attrs={'class': 'form-control'}),
            "auto": forms.RadioSelect(attrs={'class': 'form-control'}),
            'type': forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect)
        }

views.py

class AutoSendView(generic.TemplateView):
    template_name = 'core/mailbox/autoSendMail.html'
    context_object_name = 'autosend'
    extra_context = {"mailbox_page": "active"}
    form_class = SendMailSetting

    def post(self, request, *args, **kwargs):
        if request.POST.get('manual'):
            logger.info("Set to: manual email send")
            AutoSendMail.objects.filter(pk=1).update(auto=True,
                                                     manual=False,
                                                     type="manual")
        elif request.POST.get('auto'):
            logger.info("Set to auto email send")
            AutoSendMail.objects.filter(pk=1).update(auto=True,
                                                     manual=False,
                                                     type="auto")

        return HttpResponseRedirect(self.request.path_info)

autoSendMail.html

<form class="card" action="" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <div class="card-body">
        <h3 class="card-title">Update Mail Settings</h3>
        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    <label class="form-label">Send E-mail</label>
                    <button type="radio" name="manual" value="manual" class="btn btn-primary">Manual</button>
                    <button type="radio" name="auto" value="auto" class="btn btn-primary">Automated</button>
                </div>
            </div>
        </div>
    </div>
</form>

В настоящее время это выглядит следующим образом:

Currently, it looks like this

А я бы хотел, чтобы это выглядело примерно так:

Wanted result

На данный момент я использую только POST запрос, и я предполагаю, что для информирования пользователя мне также нужно использовать GET запрос, но я не могу заставить его работать. Также я сейчас не использую форму, я пытался использовать ее разными способами, но не могу добиться нужного результата...

Может ли кто-нибудь мне помочь?

Вы создали modelForm, но не используете ее здесь. В любом случае для базового метода вы можете попробовать следующий метод

<input type="radio" name="update_type" value="manual">Manual</input>
<input type="radio" name="update_type" value="auto">Automated</input>
<button type="submit" class="btn btn-primary">Submit</button>

views.py

def post(self, request, *args, **kwargs):
   update_type = request.POST.get('update_type'):
   if update_type == 'manual':
       "update db with manual to true"
   else:
       "update the db with auto to true"
Вернуться на верх