Django ChoiceField с пользовательскими формами
Я относительно недавно познакомился с Django и изучил несколько руководств по созданию регистрационных форм с помощью Django.
**This is the html form code**
<form action="{% url 'register' %}" method="post">
{% csrf_token %}
<div class="form-row">
<div class="col form-group">
<label>First name</label>
{{ form.first_name }}
</div> <!-- form-group end.// -->
<div class="col form-group">
<label>Last name</label>
{{ form.last_name }}
</div> <!-- form-group end.// -->
</div> <!-- form-row end.// -->
<div class="form-row">
<div class="col form-group">
<label>Email</label>
{{ form.email }}
</div> <!-- form-group end.// -->
<div class="form-group col-md-6">
<label>Directorate</label>
<select name="directorate" class="form-control" required>
<option value="" disabled selected>Select</option>
{% for i in form.directorate %}
<option value=""></option>
{% endfor %}
</select>
</div> <!-- form-group end.// -->
</div> <!-- form-row end.// -->
<div class="form-row">
<div class="form-group col-md-6">
<label>Create password</label>
{{ form.password }}
</div> <!-- form-group end.// -->
<div class="form-group col-md-6">
<label>Repeat password</label>
{{ form.confirm_password }}
</div> <!-- form-group end.// -->
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-block"> Register </button>
</div> <!-- form-group// -->
</form>
**This is models.py code**
class Account(AbstractBaseUser):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
username = models.CharField(max_length=50, unique=True)
email = models.EmailField(max_length=100, unique=True)
directorate = models.CharField(max_length=100)
# required
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_superadmin = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
objects = MyAccountManager()
**This is views.py code**
from django.http import HttpResponse
from django.shortcuts import render
from .forms import RegistrationForm
from .models import Account
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
first_name = form.cleaned_data['first_name']
last_name = form.cleaned_data['last_name']
email = form.cleaned_data['email']
username = email.split('@')[0]
password = form.cleaned_data['password']
directorate = form.cleaned_data['directorate']
user = Account.objects.create_user(first_name=first_name, last_name=last_name, email=email, directorate=directorate, username=username, password=password)
user.save()
else:
form = RegistrationForm()
context = {
'form': form,
}
return render(request, 'accounts/register.html', context)
**This is forms.py code**
from django import forms
from .models import Account
DIRECTORATE_CHOICES = [
("E", "Education"),
("H", "Health"),
("T", "Transport"),
]
class DirectorateChoices(forms.Form):
directorate = forms.ChoiceField(choices=DIRECTORATE_CHOICES,widget=forms.Select(attrs={
'class':'form-control'}), required=True)
class RegistrationForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput(attrs={
'placeholder': 'Enter your password',
}))
confirm_password = forms.CharField(widget=forms.PasswordInput(attrs={
'placeholder': 'Confirm your password',
}))
class Meta:
model = Account
fields = ['first_name', 'last_name', 'email', 'directorate', 'password']
def __init__(self, *args, **kwargs):
super(RegistrationForm, self).__init__(*args, **kwargs)
self.fields['first_name'].widget.attrs['placeholder'] = 'First name'
self.fields['last_name'].widget.attrs['placeholder'] = 'Last name'
self.fields['email'].widget.attrs['placeholder'] = 'Email address'
self.fields['directorate'].widget.attrs['placeholder'] = 'Select your directorate'
self.fields['password'].widget.attrs['placeholder'] = 'Enter password'
self.fields['confirm_password'].widget.attrs['placeholder'] = 'Confirm password'
for field in self.fields:
self.fields[field].widget.attrs['class'] = 'form-control'
](https://i.stack.imgur.com/ovIOQ.png)
Однако я хочу ввести ChoiceField в мою регистрационную форму, но из прочитанного и прочитанного в Youtube, поле, которое должно загружать варианты выбора, не загружается. Пожалуйста, помогите мне в этом!!![Это моя регистрационная форма