2012-09-21 55 views
0

我有兩個模型,任務和行動。行動有一個ToOneField任務稱爲任務按預期工作。任務有一個名爲actions的屬性,它返回一個有序的動作列表,除非現在我想用Tastypie作爲ToManyField將它暴露給API。這是我當前的嘗試:OneToMany與財產Tastypie

class TaskResource(ModelResource): 
    actions = fields.ToManyField('ActionResource', 'actions') 

    class Meta: 
     queryset = Task.objects.all() 
     resource_name = 'task' 

class ActionResource(ModelResource): 
    task = fields.ToOneField(TaskResource, 'task') 

    class Meta: 
     queryset = Action.objects.all() 
     resource_name = 'action' 

此輸出:

"error_message": "'list' object has no attribute 'all'" 

沒有人有不涉及重大的重新設計任何想法?

+0

模型的外觀如何? – yakxxx

回答

2

如果要返回屬性你在你的任務資源來定義一個字段,例如像:

actions = CharField('actions', readonly=True) 

上面的代碼將訪問PROPERT在任務模式。如果您想以不同於缺省情況下tastypie的方式處理返回的值,您可以定義一個dehydrate_actions方法。

但是,如果你想這樣做你定義資源的方式,你實際上並不想訪問任務模型中的屬性,你想訪問你的反向關係的管理器,並在django中默認你將通過調用action_set來訪問它。 所以在您的任務資源:

actions = fields.ToManyField('ActionResource', 'action_set') 

More about this in the docs.

你實際上已經在你的代碼做什麼試圖訪問一個反向關係,但訪問而不是不明白tastypie屬性。

+0

謝謝,第二種方式完美運作。 –