是否可以在tastypie中指定相关资源的字段

时间:2014-03-25 10:11:33

标签: django tastypie

说我有以下型号和资源:

models.py

class Post(models.Model):
   field_one = fields.CharField()
   field_two = fields.CharField()
   field_three = fields.CharField()
   field_four = fields.CharField()
   readers = fields.ManyToManyField('readers.Reader')

API / resources.py

class PostResource(common.Resource)
    readers = fields.ToManyField('ReaderResource', 'readers')

    class Meta:
        queryset = models.Post.objects.all()


class ReaderResource(common.Resource)
    posts = fields.ToManyField('PostResource', 'post_set', full=True, null=True)

    class Meta:
        queryset = models.Reader.objects.all()

当我查询PostResource时,我想只获取ReaderResource中的一些指定字段,但是当我直接查询PostResource时,我想获取所有字段。因此,例如当我查询PostResource时,我希望获得类似于以下内容的数据:

{
    field_one: value,
    field_two: value,
    field_three: value,
    field_four: value,
    readers: [
        # List of readers' resource uris
    ]
}

但是,当我查询ReaderResource时,我只想从field_one获取field_twoPostResource,例如:

{
    # Other reader fields here
    posts: [{
        field_one: value,
        field_four: value,
    }]
}

有没有办法可以指定我想要的相关资源中的哪些字段?如果没有明星前进的方法来做到这一点,那为什么会这样呢?这不是一个非常常见的用例吗?难道不能将它构建到tastypie中吗?

1 个答案:

答案 0 :(得分:1)

常见的方法是再创建一个资源,例如SafePostResource以下PostResource

class SafePostResource(PostResource):
    class Meta(PostResource.Meta):
        fields = ['field_one', 'field_two']


class ReaderResource(common.Resource)
    posts = fields.ToManyField('SafePostResource', 'post_set', full=True, null=True)

    class Meta:
        queryset = models.Reader.objects.all()

没有注册该资源。

请注意,创建相关资源并不总是那么容易,但Django Tastypie会创建所有内容easier