Flaskでフォームベースのアプリケーションを構築していて、オプションの電子メールフィールドで問題が発生しました。Python AppEngine、EmailPropertyを空白にすることはできません
タイプEmailProperty()
のデータストアフィールドを設定して空にすることはできますか?エンティティ定義でrequired=False
を指定しても、フィールドmust not be empty
を示すBadValueError
が引き続き発生しているようです。 Pythonクライアントの最新バージョンではいくつかの
# my entity definition
from google.appengine.ext import db
class Model(db.Model):
email = db.EmailProperty(required=False)
、ライン879の周りgoogle_appengine/google/appengine/api/datastore_types.py
で、Emailクラスの__init__
呼び出しは次のようになります。
class Email(unicode):
def __init__(self, email):
super(Email, self).__init__()
ValidateString(email, 'email')
それは持っていValidateStringにオーバー実行を渡します。何の逆数にセットされます場合、それはいいだろう
def ValidateString(value,
name='unused',
exception=datastore_errors.BadValueError,
max_len=_MAX_STRING_LENGTH,
empty_ok=False):
:どのFalse
デフォルトブール・パラメータをempty_ok私のEmailProperty
フィールドのrequired=
paramに設定されています。たとえば、私のエンティティ定義ではrequired=False
があるので、を呼び出すときにこの電子メールクラスがTrue
をempty_ok
パラメータに渡すことができればいいと思います。しかし、そうではないので、私は本当に良い回避策を理解したいと思います。
オプションのメールアドレスフィールドを保存しようとしている唯一の開発者はいませんか?私のフォームでデータが渡された場合は、組み込みの検証を実行したいので、助けてもStringProperty
に変更したくないのですが...
残念ながらEmailPropertyは空白の値を許可されたことはありません。これは、私が多くの状況でこれらのタイプのプロパティを使用して放棄した理由の1つです。 ndbにはEmailPropertyが含まれていないことに注意してください。レガシーコードを持っていない限り、あなたは本当にdbを使いたいのですか? –
ありがとう、@ティムホフマン。それは「レガシーコード」よりも「レガシーな作業知識」です。私はdbにndbよりよく慣れています.dbがすぐに廃止されることがないなら、数千行のコードの後にスイッチを入れるためにパフォーマンスの向上は必要ありません。 :) – iandouglas
個人的に私はEmailPropertyを使用せず、顧客バリデーターでStringPropertyを使用することを推奨します。 –