2012-04-27 26 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) 

希望這可以幫助別人。

感謝

相關問題