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>
В настоящее время это выглядит следующим образом:
А я бы хотел, чтобы это выглядело примерно так:
На данный момент я использую только 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"