Django проверяет, существует ли введенное имя пользователя, и если оно существует, оно падает с ошибкой.
Я хочу, чтобы он проверял, существует ли имя пользователя так же, как он проверяет, является ли электронная почта действительной или что пароли являютсясоответствует, т.е. возвращает соответствующее HTML-сообщение пользователю.
это моя попытка сделать это из view.py
if request.method == 'POST':
form = SubscriberForm(request.POST)
if form.is_valid():
# Unpack form values
username = form.cleaned_data['username']
password = form.cleaned_data['password1']
email = form.cleaned_data['email']
first_name = form.cleaned_data['first_name']
last_name = form.cleaned_data['last_name']
# Create the User record
user = User(username=username, email=email,
first_name=first_name, last_name=last_name)
if User.objects.filter(username=username).exists():
context= {'form': form, 'error':'The username you entered has already been taken. Please try another username.'}
return render(request, template, context)
это моя HTML-форма (соответствующая часть):
<h5 class="sn-sh">CREATE A USERNAME AND PASSWORD</h5>
<table class="table">
<tbody>
<tr>
<th>{{ form.username.label }}</th>
<th>{{ form.email.label }}</th>
</tr>
<tr>
<td>{{ form.username }}</td>
<td>{{ form.email }}</td>
</tr>
<tr>
<td>{{ form.username.errors }}</td>
<td>{{ form.email.errors }}</td>
</tr>
<tr>
<th>Password</th>
<th>Confirm Password</th>
</tr>
<tr>
<td>{{ form.password1 }}</td>
<td>{{ form.password2 }}</td>
</tr>
<tr>
<td>{{ form.password1.errors }}</td>
<td>{{ form.password2.errors }}</td>
</tr>
</tbody>
</table>
В настоящее время он не является поклонником, но не возвращает пользователю никакого сообщения ... (на самом деле ничего не происходит)
Что я делаю не так?Как я могу заставить его отправить приятное сообщение пользователю?
Я пытался использовать ValidationError - но он также просто потерпел крах и отправил ужасное сообщение пользователю
----- edit---- Я добавил уродливое решение, которое работает
Я добавил в Forms.py следующие строки:
from django.contrib.auth.models import User
.
.
.
class SubscriberForm(AddressMixin, UserCreationForm):
.
.
.
def clean_username(self):
username = self.cleaned_data['username']
if User.objects.filter(username=username).exists():
raise forms.ValidationError("User name already exist, please choose new one")
return username
Это решение, насколько я тестировал работу - но оно уродливо и кажется, что зазвонило(Теперь у меня есть функциональные возможности views.py внутри forms.py - надеюсь, что у вас есть лучшее решение, обеспечивающее чистоту модели django