10

我有一个 Tastypie ModelResource,它从常规 Django 模型中获取其字段。我想让 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 回答