Взгляните на телефон org.apache.commons.lang.StringUtils#rightPad(String str, int size, char padChar)
.
, Но алгоритм очень прост (клавиатура прямо до символов размера):
public String pad(String str, int size, char padChar)
{
StringBuffer padded = new StringBuffer(str);
while (padded.length() < size)
{
padded.append(padChar);
}
return padded.toString();
}
Как указали ars и Diarmuid, вы можете передать request.user
в свою форму и использовать его для проверки электронной почты. Однако код Диармуида неверен. Фактически код должен выглядеть так:
from django import forms
class UserForm(forms.Form):
email_address = forms.EmailField(widget = forms.TextInput(attrs = {'class':'required'}))
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(UserForm, self).__init__(*args, **kwargs)
def clean_email_address(self):
email = self.cleaned_data.get('email_address')
if self.user and self.user.email == email:
return email
if UserProfile.objects.filter(email=email).count():
raise forms.ValidationError(u'That email address already exists.')
return email
Затем, по вашему мнению, вы можете использовать его так:
def someview(request):
if request.method == 'POST':
form = UserForm(request.POST, user=request.user)
if form.is_valid():
# Do something with the data
pass
else:
form = UserForm(user=request.user)
# Rest of your view follows
Обратите внимание, что вы должны передать request.POST в качестве аргумента ключевого слова, поскольку ваш конструктор ожидает 'user' в качестве первого позиционного аргумента .
Делая это таким образом, вам нужно передать пользователя
в качестве аргумента ключевого слова. Вы можете передать request.POST
в качестве позиционного аргумента или аргумент ключевого слова (через data = request.POST
).
Насколько мне известно, нет. Один из способов справиться с этим - сделать так, чтобы класс формы __ init __
принимал необязательный параметр электронной почты, который он может сохранить как атрибут. Если предоставляется во время создания формы, он может использовать это во время проверки для интересующего вас сравнения.