[解決済み] Djangoです。フォームのメールフィールドは、アドレスがあっても 'this field cannot be null/this field cannot be blank' を返します。
質問内容
始める前に、同じようなエラーに目を通しましたが、問題を見つけることができないようです。
背景 私はDjangoのmodel.pyを使って登録フォームを作っています。開発環境でこのフォームを動かしています。 フォームにデータを入力すると、sqlite3 db に保存されるはずです。 しかし、現時点では、フォームへの入力が完了すると、2つの問題が発生します。それは次のようなものです。
問題点 1) 'email'フィールドにメールアドレスがあるにもかかわらず、'this field cannot be null'と表示されます。 そこで、models.pyファイルにemailに'null=true'を追加しました。 これを完了し、もう一度試してみると、次のようになります。 2) 'this field cannot be blank' という別のエラーが発生しました。 そこで、models.pyファイルにemailに'blank=true'を追加しました。 この結果、フォームを完成させ、データを登録することができました。 しかし、現在、問題3が発生しています。 3) dbに入り、誰が登録したかを見るためにクリックすると、emailがあるべき場所に'none'と表示されます。 none "をクリックすると、以下のエラーが表示されます(私のコードは以下の通りです)。
TypeError at .............
coercing to Unicode: need string or buffer, NoneType found
Request Method: GET
Request URL: ......
Django Version: 1.8.2
Exception Type: TypeError
Exception Value:
coercing to Unicode: need string or buffer, NoneType found
Exception Location: /Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/utils/encoding.py in force_text, line 92
Python Executable: /usr/bin/python
Python Version: 2.7.6
Python Path:
['/Users/Desktop/Website/booksrc',
'/Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg',
'/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC',
'/Library/Python/2.7/site-packages']
Server time: Mon, 28 Sep 2015 00:19:11 +0000
Error during template rendering
In template /Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/contrib/admin/templates/admin/change_form.html, error at line 21
coercing to Unicode: need string or buffer, NoneType found
11 {% block coltype %}colM{% endblock %}
12
13 {% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %}
14
15 {% if not is_popup %}
16 {% block breadcrumbs %}
17 <div class="breadcrumbs">
18 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
19 › <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
20 › {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
21
› {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}
{{ original|truncatewords:"18" }}
{% endif %}
22 </div>
23 {% endblock %}
24 {% endif %}
25
26 {% block content %}<div id="content-main">
27 {% block object-tools %}
28 {% if change %}{% if not is_popup %}
29 <ul class="object-tools">
30 {% block object-tools-items %}
31 <li>
私のコードも載せています。
models.py。
from django.db import models
# Create your models here.
class Register(models.Model):
Profession = models.CharField(max_length=120)
first_name = models.CharField(max_length=120)
last_name = models.CharField(max_length=120)
email = models.EmailField(max_length = 120, null=True, unique=True, blank=True)
phone_number = models.CharField(max_length=120)
instgram_ID = models.CharField(max_length=120, blank=True, null=True)
facebook_ID = models.CharField(max_length=120, blank=True, null=True)
twitter_ID = models.CharField(max_length=120, blank=True, null=True)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
def __unicode__(self):
return self.email
views.py。
from django.shortcuts import render
from .forms import RegisterForm
# Create your views here.
def home(request):
title = 'Welcome'
form = RegisterForm(request.POST or None)
context = {
"title": title,
"form": form
}
if form.is_valid():
#form.save()
instance = form.save(commit=False)
first_name = form.cleaned_data.get("first_name")
if not first_name:
first_name = "New first name"
instance.first_name = first_name
#if not instance.full_name:
# instance.full_name = "Justin"
instance.save()
context = {
"title": "Thank you"
}
return render(request, "home.html", context)
forms.py
from django import forms
from .models import Register
class RegisterForm(forms.ModelForm):
class Meta:
model = Register
fields = ['first_name', 'last_name', 'email', 'phone_number', 'instgram_ID', 'facebook_ID', 'twitter_ID']
def clean_email(self):
email = self.cleaned_data.get('email')
email_base, provider = email.split("@")
domain, extension = provider.split('.')
#if not domain = 'USC':
# raise forms.ValidationError("Please make sure you use your USC email.")
#if not extension == "edu":
# raise forms.ValidationError("Please use a valid .EDU email address")
#return email
def clean_full_name(self):
full_name = self.cleaned_data.get('full_name')
#write validation code.
return full_name
admin.py
from django.contrib import admin
# Register your models here.
from .forms import RegisterForm
from .models import Register
class RegisterAdmin(admin.ModelAdmin):
list_display = ["__unicode__", "timestamp", "updated"]
form = RegisterForm
#class Meta:
# model = Register
admin.site.register(Register, RegisterAdmin)
私はこれまで、潜在的なエラーである可能性を考え、できる限りあらゆる部分を微調整してきました。これは悪い手だったかもしれませんし、物事を必要以上に混乱させてしまったかもしれません。 呆れるような説明をお願いします。 どんなに簡単なエラーでも、私はそこから学ぶことができると思います。
ありがとうございました。
解決方法は?
の最後の行をコメントアウトしていますね。
clean_email
メソッドは値を返すので、代わりに None を返します。そのメソッドの戻り値はフィールドの値として使用されるので、実際の電子メールの値を返す必要があります。
(本当に、このようなものをデバッグしているときに "email cannot be blank" と表示されたら、それができるようにモデルを修正するのではなく、なぜフィールドが空だと報告されたのかを調査することから始めるべきです)。
関連
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Pythonの@decoratorsについてまとめてみました。
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】ImportError: xgboost という名前のモジュールがない
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python jiabaライブラリの使用方法について説明
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み] データ型が理解できない
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない