2016-12-02 4 views
0

複数のサブタスク用にAPIを作成しようとしています。 は私が親として別のタスクを持つことができるタスクモデルを、持っている:あなたの時間をDjango-Tastypie自己児童

class TaskResource(ModelResource): 
    parent_task = fields.ForeignKey(TaskResource, 'parent_task', full=False) <-- ERROR HERE 

    class Meta: 
     queryset = Task.objects.all() 
     resource_name = 'task' 
     list_allowed_methods = ['get', 'put', 'post', 'delete'] 
     include_resource_uri = False 

    def dehydrate(self, bundle, for_list=False): 
     bundle.data["subtasks"] = "how?" <-- HOW?? 
     return bundle 

ありがとう:

class Task(models.Model): 
    parent_task = models.ForeignKey("Task", null=True, blank=True) 
    name = models.CharField(max_length=64) 

    def __unicode__ (self): 
     return self.name 

は今、私はtastypieリソースを作成しようとしています。

P.S.私は次のようなものが必要です:

[ 
    { 
     "id": 1, 
     "name": "Task 1", 
     "subtasks": [ 
      { 
       "id": 1, 
       "name": "Task 1", 
       "subtasks": [...] 
      } 
     ] 
    }, 
    { 
     "id": 2, 
     "name": "Task 2", 
     "subtasks": "how?" 
    } 
] 

答えて

1

ほとんどのコピーはIncluding child resources in a Django Tastypie APIですが、正確ではありません。

  1. あなたの最初の問題は、自己間違った関係を指定することです。ちょうどself次のようになります。

    第二
    parent_task = fields.ForeignKey('self', 'parent_task', null=True, full=False) 
    
  2. 、予告null=True - 親がnullである可能性があります。

  3. 最後に、あなただけの別の関係フィールドを追加し、

    subtasks = fields.ToManyField('self', 'task_set', full=True) 
    

    task_setTask.parent_taskフィールドのrelated_nameで詳細をお願いする必要があります。

結果のコードは次のとおりです。

class TaskResource(ModelResource): 
    parent_task = fields.ForeignKey('self', 'parent_task', null=True, full=False) 
    subtasks = fields.ToManyField('self', 'subtasks', full=True) 

    class Meta: 
     queryset = Task.objects.all() 
     resource_name = 'task' 
     list_allowed_methods = ['get', 'put', 'post', 'delete'] 
     include_resource_uri = False 

そして結果:

{ 
    "meta": { 
     "previous": null, 
     "total_count": 3, 
     "offset": 0, 
     "limit": 20, 
     "next": null 
    }, 
    "objects": [ 
     { 
      "parent_task": null, 
      "subtasks": [ 
       { 
        "parent_task": "/api/v1/task/1/", 
        "subtasks": [], 
        "id": 2, 
        "name": "Root's Child 1" 
       }, 
       { 
        "parent_task": "/api/v1/task/1/", 
        "subtasks": [], 
        "id": 3, 
        "name": "Root's Child 2" 
       } 
      ], 
      "id": 1, 
      "name": "Root Task" 
     }, 
     { 
      "parent_task": "/api/v1/task/1/", 
      "subtasks": [], 
      "id": 2, 
      "name": "Root's Child 1" 
     }, 
     { 
      "parent_task": "/api/v1/task/1/", 
      "subtasks": [], 
      "id": 3, 
      "name": "Root's Child 2" 
     } 
    ] 
} 
+0

すっごいどうもありがとうございました! – KaronatoR