3

パラメータを渡さないDjangoモデルで使用hstore.DictionaryField()し、モデルをDjano adminに登録すると、管理インターフェイスで新しいキー値行をオンザフライで作成できます。

スキーマ モードで同じフィールドを使用すると、パラメータhstore.DictionaryField(schema=['some schema description'])に記述された一定量のフィールドが取得されschemaます。

これらの機能の両方を同時に持つことはできますか?つまり、スキーマの説明にリストされている特定のタイプの固定フィールドをいくつか持ちながら、新しいフィールドを追加することはできますか?

更新

これを解決する 1 つの方法は、2 つの DictionaryField をスキーマ付きのものとスキーマなしのものを使用することですが、最適なソリューションとは言えません。

4

1 に答える 1

1

答えはノーです。現在の hstore ライブラリの実装では、両方を持つことはできません。init 関数を見てください (これは github のソースからのものです)。

class DictionaryField(HStoreField):
    description = _("A python dictionary in a postgresql hstore field.")

    def __init__(self, *args, **kwargs):
        self.schema = kwargs.pop('schema', None)
        self.schema_mode = False
        # if schema parameter is supplied the behaviour is slightly different
        if self.schema is not None:
            self._validate_schema(self.schema)
            self.schema_mode = True
            # DictionaryField with schema is not editable via admin
            kwargs['editable'] = False
            # null defaults to True to facilitate migrations
            kwargs['null'] = kwargs.get('null', True)

        super(DictionaryField, self).__init__(*args, **kwargs)

スキーマが設定されている場合、フィールドの editable 引数が false に設定されていることがわかります。これは、管理 UI で値を編集できるかどうかを確認するために Django 管理者が確認するものです。

残念ながら、いくつかのオプションしかありません。そのクラスから継承する独自のクラスを作成して自分でオーバーライドするか、github ページでプル リクエストまたはイシューを開いて、誰かがそれに到達することを期待します。

于 2016-07-28T17:58:44.497 に答える