Недавно я добавил i18n и l10n в свое приложение Django, но моя регистрация сломалась. У меня есть это:
мое приложение/views.py
def register_user(request):
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
print "Is valid"
form.save()
return HttpResponseRedirect('/register_success/')
args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
print "Is invalid"
return render_to_response('register.html', args, context_instance=RequestContext(request))
register.html
{% extends 'login_base.html' %}
{% block content %}
<div class="col-sm-3 col-sm-offset-5">
<h1> Join Now</h1>
<form method='POST' action="{% url 'register' %}"> {% csrf_token %}
{% if form.errors %}
<p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<table>
{{ form.as_p }}
</table>
<input type='Submit' class='btn btn-primary btn-block'>
</form>
</div>
{% endblock %}
urls.py
# -*- coding: utf-8 -*-
from django.conf.urls import include, url, patterns
from django.contrib import admin
from django.conf import settings
from django.conf.urls.i18n import i18n_patterns
urlpatterns = i18n_patterns('',
url(r'^$', 'myApp.views.home', name='home'),
url(r'^admin/', include(admin.site.urls)),
url(r'^auth/$', 'myApp.views.auth_view', name='auth'),
url(r'^register/', 'myApp.views.register_user', name='register'),
url(r'^register_success/', 'myApp.views.register_success', name='register_success'),
)
Я добавил несколько операторов отладки в свой views
, которые предполагают, что форма недействительна, но это работало до того, как я изменил, чтобы добавить поддержку i18n. Кто-нибудь сталкивался с этим раньше?
Некоторые из изменений, которые я пытался внести, — это изменение всех HttpResponseRedirect('/foo/')
на HttpResponseRedirect(reverse('foo'))
и изменение действий формы с action='/register/'
на action="{% url 'register' %}"
.
Любая помощь будет здорово. Пожалуйста, дайте мне знать, если я упустил какие-либо важные детали.
Я использую Джанго 1.7.4.
Спасибо, ерип
ИЗМЕНИТЬ
В моей регистрационной форме я получаю сообщение об ошибке «Introduzca una fecha válida». (Используйте действительную дату).
Мой текущий формат даты — ММ/ДД/ГГГГ, но я использую испанский язык. Что я делаю? Я уже определил формат даты в моем forms
, ниже:
формы.py
class MyRegistrationForm(forms.ModelForm):
"""
Form for registering a new account.
"""
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
USER_TYPE = (
('S', 'Student'),
('T', 'Teacher'),
('B', 'Student/Teacher'),
)
email = forms.EmailField(widget=forms.EmailInput,label="Email")
date_of_birth = forms.DateField(widget=forms.DateInput(format='%m/%d/%Y'), label="Date of birth (MM/DD/YYYY)")
gender = forms.ChoiceField(widget=RadioSelect, choices=GENDER_CHOICES, label="Gender")
user_type = forms.ChoiceField(widget=RadioSelect, choices=USER_TYPE, label="Type of user")
password1 = forms.CharField(widget=forms.PasswordInput,
label="Password")
password2 = forms.CharField(widget=forms.PasswordInput,
label="Password (again)")
class Meta:
model = MyUser
fields = ['email', 'date_of_birth', 'gender', 'user_type', 'password1', 'password2']
def clean(self):
"""
Verifies that the values entered into the password fields match
NOTE: Errors here will appear in ``non_field_errors()`` because it applies to more than one field.
"""
cleaned_data = super(MyRegistrationForm, self).clean()
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError("Passwords don't match. Please enter both fields again.")
return self.cleaned_data
def save(self, commit=True):
user = super(MyRegistrationForm, self).save(commit=False)
user.set_password(self.cleaned_data['password1'])
user.set_adult()
if commit:
user.save()
return user