8

各レコードに一意のフィールド「名前」があるndbモデルを作成しようとしています。このフィールドをkey_nameフィールドとして定義し、それを使用してレコードを検索したいと思います。名前フィールドを含める必要がありますか、それともkey_nameフィールドを、一意である限りユーザーが指定できる任意の文字列に設定できますか?

Model.get_or_insertを使用して、古いレコードが上書きされないようにすることを考えていますが、戻り値が新しく作成されたか、既存のものかを判断する方法はありますか?ユーザーが重複した名前を入力した場合にエラーメッセージを表示できるようにしたい。

最後に、上記のndbモデルをメタクラスとして使用するDjangoFormsモデルにkey_nameフィールドを作成して、検証/レンダリングにdjangoformsを使用できるようにしましたが、何らかの理由で定義したフィールドが表示されません。

クラスUserProfileForm(djangoforms.ModelForm):key_name = djangoforms.StringProperty()クラスメタ:モデル= UserProfile

4

1 に答える 1

14

名前フィールドを含める必要がありますか、それともkey_nameフィールドを、一意である限りユーザーが指定できる任意の文字列に設定できますか?

一意のキー名をidパラメーターとしてモデルコンストラクターに渡すことができますprofile = UserProfile(id='my_unique_name')

Model.get_or_insertを使用して、古いレコードが上書きされないようにすることを考えていますが、戻り値が新しく作成されたか、既存のものかを判断する方法はありますか?ユーザーが重複した名前を入力した場合にエラーメッセージを表示できるようにしたい。

を使用しModel.get_by_id()ます。モデルインスタンスを返すNoneか、モデルが見つからない場合は次のようになります。

profile = UserProfile.get_by_id('my_unique_name')
if profile:
    # display error message saying that the user already exists.

最後に、上記のndbモデルをメタクラスとして使用するDjangoFormsモデルにkey_nameフィールドを作成して、検証/レンダリングにdjangoformsを使用できるようにしましたが、何らかの理由で定義したフィールドが表示されません。

DjangoFormsがどのように機能するかはわかりませんが、おそらくNDBと互換性がありません。独自の検証ロジックを作成する必要があります。

于 2012-04-18T19:16:16.587 に答える