2012-08-27 28 views
5

tengo 2 modelos de la siguiente manerarecursos anidados en tastypie Django

comerciante

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) 

Categoría

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

Tengo archivo de recursos como a continuación

recurso hijo

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 
     } 

para Padres

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 
     } 

La salida es

{"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}] 

lo necesito de la siguiente manera

{"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}] 

La conclusión es "Quiero llamar a todos los objetos relacionados con un solo resto api, en lugar de llamar al api de descanso separado, que necesita una solicitud múltiple "

Respuesta

Cuestiones relacionadas