说我有以下型号和资源:
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')
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_two
和PostResource
,例如:
{
# Other reader fields here
posts: [{
field_one: value,
field_four: value,
}]
}
有没有办法可以指定我想要的相关资源中的哪些字段?如果没有明星前进的方法来做到这一点,那为什么会这样呢?这不是一个非常常见的用例吗?难道不能将它构建到tastypie中吗?
答案 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
。