我可以将tastypie modelresource字段设为只读吗?

时间:2012-04-27 17:11:39

标签: tastypie

我有一个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

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

不确定是否需要此功能,但这里是指向readonly字段的官方文档的链接。

示例:

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

希望这有助于某人。

由于

答案 2 :(得分:0)

问题在于BaseModelForm overwrites self.instance when doing validation

无论Tastypie字段是否设置readonly,都会发生这种情况(onfly影响Tastypie自己的hydrate,没有别的。)

所以我最后写了这个:https://gist.github.com/thnee/8522224