Как я могу отобразить свой виджет RadioSelect в django

У меня есть модель, форма, представление, и я не могу отобразить виджет RadioSelect. он ничего не показывает, я думаю, что все в порядке, кроме просмотров, однако я не уверен. Я в основном хочу, чтобы кто-то выбрал и выбрал из двух переключателей, представил, а затем смог зарегистрироваться в качестве одного из двух вариантов, но, как я уже сказал, я даже не могу заставить кнопки отображаться.

просмотры.py

def registration(request):
    reg = Registration.objects.all()
    return render(request, 'HTML/Registration.html', {"reg":reg})

модели.py

class Registration(models.Model):
    OPTIONS = (
            ('COUNS','Counsellor'),
            ('CLIENT','Client'),
            )
    SELECT = models.CharField(max_length=15,
                        choices=OPTIONS)

формы.py

class Registration(forms.ModelForm):
class Meta:
    model = Registration
    fields = '__all__'
    widgets = {'SELECT': forms.RadioSelect}

HTML

<form method="POST">
 {% csrf_token %}
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 
border-bottom">
 <h1 class="h2">Registration</h1>
</div>

{% render_field reg.SELECT %}

<div class="form-row">
  <div class="col pt-md-2">
    <input type="submit" value="Next" class="btn btn-primary" style="float: right;">
  </div>
</div>
</form>

person JiM    schedule 11.04.2020    source источник
comment
Вы имеете в виду модель, а не форму. Пожалуйста, не давайте модели и форме одно и то же имя. Довольно часто в форме добавляется суффикс Form.   -  person Willem Van Onsem    schedule 11.04.2020


Ответы (1)


Вы имеете в виду модель, а не форму. Пожалуйста, не давайте модели и форме одно и то же имя. Довольно часто в форме добавляется суффикс Form.

# app/forms.py

from django import forms
from app.models import Registration

class RegistrationForm(forms.ModelForm):
    class Meta:
        model = Registration
        fields = '__all__'
        widgets = { 'SELECT': forms.RadioSelect }

Затем в представлении вы можете создать такую ​​​​форму, как:

# app/views.py

from app.forms import RegistrationForm
from django.shortcuts import redirect

def registration(request):
    if request.method == 'POST':
        reg = RegistrationForm(request.POST, request.FILES)
        if reg.is_valid():
            reg.save()
            return redirect('name-of-some-view')
    else:
        reg = RegistrationForm()
    return render(request, 'HTML/Registration.html', {'reg': reg})

Примечание. В случае успешного выполнения POST-запроса необходимо создать ссылку redirect [Django-doc] для реализации ссылки Post/Redirect/Get шаблон [вики]. Это позволяет избежать того, чтобы вы делали один и тот же запрос POST, когда пользователь обновляет браузер.

person Willem Van Onsem    schedule 11.04.2020
comment
Из всех моих форм это единственная без формы в конце, спасибо, что заметили это. Он отображается сейчас. - person JiM; 12.04.2020