2012-04-27 27 views
10

我有一个Tastypie ModelResource从正规的Django模型获取它的字段。我想在Tastypie资源上对某些字段进行只读,即使它们可以在基础模型中写入。这可能以简单的方式完成吗?我可以制作一个tastypie模型资源字段只读吗?

我已经尝试了以下无济于事:

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

对不起,我忘了提,我不能得到上述的“技巧”与由Tastypie,这真的是我 – 2012-04-27 17:18:37

+2

后很哎呀生成的资源/模式工作。我通过将read_only更改为只读来实现它。我的错。 – 2012-04-27 17:22:28

+2

不应该超级电话有你的类名 – 2012-08-01 09:56:30

回答

4

通常我会做那种事的水合物/脱水的过程。

可能有其他的方式,

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

    return super(MyResource, self).hydrate(bundle) 
+2

你是对的,但我忘了提及我希望Tastypie可以为资源输出的模式,以反映它是只读的。我的'解决方案'为我做了这个。 – 2012-05-14 06:58:06

1

不知道你是否需要这个了,但这里的链接到相关readonly领域的正式文件。

例如:

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

希望这可以帮助别人。

感谢

相关问题