10

通常の Django モデルからフィールドを取得する Tastypie ModelResource があります。Tastypie リソースで特定のフィールドを読み取り専用にしたいのですが、基礎となるモデルでは書き込み可能です。これは簡単な方法で達成できますか?

私は無駄に次のことを試しました:

def __init__(self, **kwargs):
    super(ModelResource, self).__init__(**kwargs)
    for f in getattr(self.Meta, 'read_onlys', []):
        self.fields[f].read_only = True
4

3 に答える 3

4

通常、私は水和/脱水プロセスでそのようなことを行います.

他の方法もありそうですが、

def hydrate(self, bundle):
    if bundle.obj.pk:
        bundle.data['somefield'] = bundle.obj.somefield
    else:
        bundle.data.pop('somefield', None)  # no KeyError if 'somefield' missing

    return super(MyResource, self).hydrate(bundle)
于 2012-05-02T03:53:23.500 に答える
0

問題は、検証を行うときに BaseModelForm が self.instance を上書きすることです。

そしてもちろん、これは Tastypie フィールドがreadonly設定されているかどうかに関係なく発生します (これは Tastypie 自身の のみに影響しhydrate、他には何も影響しません)。

だから私はこれを書くことになった:https://gist.github.com/thnee/8522224

于 2014-01-20T15:41:17.127 に答える
0

これがもう必要かどうかはわかりませんが、読み取り専用フィールドに関連する公式ドキュメントへのリンクを次に示します。

例:

class ResourceA(ModelResource):
    read_only_field = fields.DateTimeField('attribute', readonly=True)

これが誰かに役立つことを願っています。

ありがとう

于 2014-12-17T10:41:38.953 に答える