Вы можете выдвинуть имя пользователя из полей формы следующим образом:
class RegisterForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super(RegisterForm, self).__init__(*args, **kwargs)
# remove username
self.fields.pop('username')
...
Но тогда вам нужно будет ввести произвольное имя пользователя перед сохранением, например так:
from random import choice
from string import letters
...
class RegisterForm(UserCreationForm):
...
def save(self):
random = ''.join([choice(letters) for i in xrange(30)])
self.instance.username = random
return super(RegisterForm, self).save()
Существуют и другие соображения, которые необходимо учитывать при взломе, например, убедитесь, что ваша LoginForm будет выдвигать имя пользователя позже, когда это необходимо:
class LoginForm(AuthenticationForm):
email = forms.EmailField(label=_("E-mail"), max_length=75)
def __init__(self, *args, **kwargs):
super(LoginForm, self).__init__(*args, **kwargs)
self.fields['email'].required = True
# remove username
self.fields.pop('username')
def clean(self):
user = User.objects.get(email=self.cleaned_data.get('email'))
self.cleaned_data['username'] = user.username
return super(LoginForm, self).clean()