Как внедрить DateField в форму регистрации пользовательской модели, используя UserCreationForm в Django?
У меня есть настроенная форма регистрации, затем я попытался добавить поле даты рождения в модель пользователя и добавить его в форму регистрации. DateField появляется в форме регистрации, однако всякий раз, когда я отправляю данные для регистрации нового пользователя, я получаю сообщение об ошибке "Введите действительную дату" ( см. Здесь). Вот что у меня есть в файле forms.py:
BIRTH_YEAR_CHOICES = (2000, 1999, 1998, 1997, 1996, 1995, 1994, 1993, 1992, 1991,
1990, 1989, 1988, 1987, 1986, 1985, 1984, 1983, 1982, 1981,
1980, 1979, 1978, 1977, 1976, 1975, 1974, 1973, 1972, 1971,
1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961,
1960, 1959, 1958, 1957, 1956, 1955, 1954, 1953, 1952, 1951,
1950, 1949, 1948, 1947, 1946, 1945, 1944, 1943, 1942, 1941,
1940, 1939, 1938, 1937, 1936, 1935, 1934, 1933, 1932, 1931,
1930, 1929, 1928, 1927, 1926, 1925, 1924, 1923, 1922, 1921,
1920, 1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912, 1911,
1910, 1909, 1908, 1907, 1906, 1905, 1904, 1903, 1902, 1901, 1900)
class DateInput(forms.DateField):
input_type = settings.DATE_INPUT_FORMATS #This is ['%d %B %Y']
#Create a class which inherits from Django's UserCreationForm class and add fields necessary for my users
class UserRegisterForm(UserCreationForm):
email = forms.EmailField(required=True)
first_name = forms.CharField(required=True, max_length=50)
last_name = forms.CharField(required=True, max_length=50)
date_of_birth = forms.DateField(required=True, widget=forms.SelectDateWidget(years=BIRTH_YEAR_CHOICES))
class Meta:
model = User
fields = ['username', 'email', 'first_name', 'last_name', 'date_of_birth', 'password1', 'password2']
widgets = {
'date_of_birth': DateInput()
}
def save(self, commit=True):
date_of_birth = self.pop('date_of_birth', None)
user = super(UserRegisterForm, self).save(commit)
Profile.objects.create(date_of_birth)
return user
Примечание. Я пытаюсь протестировать метод сохранения, но не могу, поскольку не могу отправить, поэтому, если это выглядит неправильно, я пока не смог понять, почему.
Это мой метод views.py:
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, 'Account created!')
return redirect('login')
else:
form = UserRegisterForm()
return render(request, 'games/register.html', {'form': form})