Python/Django - 带有提交按钮而不是按钮的单选按钮

Python/Django - radiobutton with submit button instead of buttons

我有一个 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>

目前看起来是这样的:

我希望它看起来更像这样:

目前我只使用 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"