2012-08-27 266 views
5

我有2種型號如下嵌套資源

商人

class MerchantProfile(StateModel): 

    class Meta: 
     verbose_name = "Merchant Profile" 
     ordering = ('name',) 


    def __unicode__(self): 
     return u'%s' % (self.name,) 

    user = models.OneToOneField(UserProfile, related_name="merchant_profile") 
    payment_card = models.OneToOneField(PaymentCard, related_name="merchant_profile") 
    current_state = models.IntegerField('State', choices=STATE_CHOICES) 
    name = models.CharField('Merchant Name', max_length=64) 

類別

class Category(models.Model): 
    merchant = models.ForeignKey(MerchantProfile, related_name="category") 
    name = models.CharField(max_length=30) 
    is_active=models.BooleanField() 

我有資源文件,如下

子資源

class MerchantCategoryResource(ModelResource): 
    api_key = fields.CharField(attribute='merchant__user__api_key', readonly=True) 
    class Meta: 
     #get username from headers and apply filter query 
     queryset = Category.objects.all() 
     resource_name = 'merchantcategory' 
     #excludes = ['id','email', 'password', 'is_active', 'is_staff', 'is_superuser'] 
     detail_allowed_methods = ['get'] 
     default_format = "application/json" 
     filtering = { 
      'user_id': ALL, 
      'api_key':ALL 
     } 

父資源

class MerchantAllResource(ModelResource): 
    category = fields.ToManyField(MerchantCategoryResource,'category') 

    class Meta: 
     #get username from headers and apply filter query 
     queryset = MerchantProfile.objects.all() 
     resource_name = 'merchantinfo' 
     #excludes = ['id','email', 'password', 'is_active', 'is_staff', 'is_superuser'] 
     detail_allowed_methods = ['get'] 
     default_format = "application/json" 
     filtering = { 
      'user_id': ALL, 
      'api_key':ALL 
     } 

輸出是

{"meta": {"limit": 20, "next": null, "offset": 0, "previous": null, "total_count": 1}, "objects": [{"category": ["/api/ecp/merchantcategory/1/"], "create_time": "2012-08-17T12:56:55", "current_state": 1, "id": 1, "modified_time": "2012-08-17T12:56:55", "name": "ram", "resource_uri": "/api/ecp/merchantinfo/1/", "utcStateCreated": null, "utcStateDisabled": null, "utcStateEnabled": null, "utcStateUnsubscribed": null}] 

我需要如下

{"meta": {"limit": 20, "next": null, "offset": 0, "previous": null, "total_count": 1}, "objects": [{"category": ["id": 1, "is_active": true, "name": "test1", "resource_uri": "/api/ecp/merchantcategory/1/"], "create_time": "2012-08-17T12:56:55", "current_state": 1, "id": 1, "modified_time": "2012-08-17T12:56:55", "name": "ram", "resource_uri": "/api/ecp/merchantinfo/1/", "utcStateCreated": null, "utcStateDisabled": null, "utcStateEnabled": null, "utcStateUnsubscribed": null}] 

底線是「我想打電話給單其餘所有相關對象API,而不是調用獨立的休息API,這需要多個請求「

回答