私が現在取り組んでいるシステムでは、登録時に2つの緊急連絡先番号を入力する必要があります。私は、ユーザーが有効な番号を入力していることを確認するチェックを実装したい、私はこれが0か+で始まる文字列であると判断した。これを行うために、私はフォームのクリーンメソッドをオーバーライドしようとしましたが、それはかなり動作していません。私のDjango ModelFormのCleanメソッドをオーバーライド
これは、関連する方法のための私のforms.pyコードです(今更新し、エラーが下記の投げ。):
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('emergcon1', 'emergcon2')
labels = {
'emergcon1': ('Emergency Contact Number'),
'emergcon2': ('Emergency Contact Number 2')
}
def clean_emergcon1(self):
emergcon1 = self.cleaned_data['emergcon1']
print emergcon1
if emergcon1[:1] != '0' or '+':
raise ValidationError(
_('%(emergcon1)s is not a valid phone number'),
params={'emergcon1': emergcon1},
)
return emergcon1
def clean_emergcon2(self):
emergcon2 = self.cleaned_data.['emergcon2']
if emergcon2[:1] != '0' or '+':
raise ValidationError(
_('%(emergcon2)s is not a valid phone number'),
params={'emergcon2': emergcon2},
)
return emergcon2
views.py: DEF(要求)を登録します。
登録=偽if request.method == 'POST':
user_form = UserForm(data=request.POST)
profile_form = UserProfileForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
profile = profile_form.save(commit=False)
profile.user = user
profile.save()
registered = True
else:
print(user_form.errors, profile_form.errors)
else:
user_form = UserForm()
profile_form = UserProfileForm()
return render(request, 'tennis/register.html', {'user_form':user_form, 'profile_form':profile_form, 'registered':registered})
models.py:
class UserProfile(models.Model):
user = models.OneToOneField(User)
emergcon1 = models.CharField(max_length=128, blank=False)
emergcon2 = models.CharField(max_length=128, blank=False)
def _unicode_(self):
return self.user.username
return self.emergcon1
return self.emergcon2
マイレジスタ。 HTML:
{% extends 'tennis/base.html' %}
{% load staticfiles %}
{% block body_block%}
{% block title_block %}
Registration
{% endblock %}
<body>
<h1>Register Here</h1>
{% if registered %}
<strong> Thank you for registering</strong>
<a href="{% url 'index' %}"> Return to homepage </a><br />
{% else %}
<form id="user_form" method="post" action="{% url 'register' %}">
{% csrf_token %}
<!-- displays forms -->
{{ user_form.as_p }}
{{ profile_form.as_p }}
<!-- adds submit button -->
<input type="submit" name="submit" value="Register" />
</form>
{% endif %}
</body>
{% endblock %}
フル・エラートレースバック、エラーグローバル名 '_' が定義されていません。
Internal Server Error: /tennis/register/
Traceback (most recent call last):
File "/home/steph/.virtualenvs/tennis/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/home/steph/.virtualenvs/tennis/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/steph/Documents/project/tennis_system_project/tennis/views.py", line 29, in register
if user_form.is_valid() and profile_form.is_valid():
File "/home/steph/.virtualenvs/tennis/local/lib/python2.7/site-packages/django/forms/forms.py", line 161, in is_valid
return self.is_bound and not self.errors
File "/home/steph/.virtualenvs/tennis/local/lib/python2.7/site-packages/django/forms/forms.py", line 153, in errors
self.full_clean()
File "/home/steph/.virtualenvs/tennis/local/lib/python2.7/site-packages/django/forms/forms.py", line 362, in full_clean
self._clean_fields()
File "/home/steph/.virtualenvs/tennis/local/lib/python2.7/site-packages/django/forms/forms.py", line 383, in _clean_fields
value = getattr(self, 'clean_%s' % name)()
File "/home/steph/Documents/project/tennis_system_project/tennis/forms.py", line 30, in clean_emergcon1
_('%(emergcon1)s is not a valid phone number'),
NameError: global name '_' is not defined
は解決済み、
"_としてdjango.utils.translationインポートugettext_lazyからのインポート" として固定新しい問題:0で始まる数字が有効であると認識されていません。私は07896428317とそれを提供し、私はそれが私に "07896428317は有効な電話番号ではありません"提出をクリックしたとき。
は 'のenctypeを削除します=」 multipart/form-data "を完全に削除します。 –
あなたはどのバージョンの 'clean'を使用していますか?あなたの質問で私が見ているものか、私の答えにあるものは? –
あなたは 'django.utils.translation import ugettext_lazy as _'から'が欠けているようです。私の答えを更新しました。ご希望の場合は、コメントの一部を削除してください。彼らは十分になっています... –