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

肝心なのは、「複数のリクエストが必要な個別のREST APIを呼び出すのではなく、単一のRESTAPIですべての関連オブジェクトを呼び出したい」ということです。

4

1 に答える 1

4

full = Trueカテゴリフィールド宣言でキーワードargとして指定する必要があります:http: //django-tastypie.readthedocs.org/en/latest/fields.html#id1

于 2012-08-27T08:03:28.423 に答える