2012-08-27 16 views
5

Ich habe 2 Modelle wie untenverschachtelte Ressourcen in django tastypie

Händler

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) 

Kategorie

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

I-Ressource-Datei wie unten

Kinder Ressource

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 
     } 

Eltern Ressource

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 
     } 

Der Ausgang ist

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

Ich brauche es als

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

Unterm Strich folgt, ist „i alle zugehörigen Objekte mit Einzel Rest nennen wollen api, anstatt separaten Rest api aufzurufen, die mehrere Anfrage "

Antwort

Verwandte Themen