有理由将自己的资源子类化为tastypie

时间:2013-02-03 12:54:42

标签: django rest tastypie

我见过自定义资源进一步子类化的测试代码。 但这是test的缘故,不是为了任何真正的用途。

为什么有人想出于明显的原因(但显然不是我)对子资源进行子类化?

一个例子就足够了。

1 个答案:

答案 0 :(得分:1)

我刚遇到需要子类化资源的情况。 我有一个django模型,它有几个类似的子类(我已经简化了很多):

class Information(models.Model):
    name = models.CharField)

class Question(Information):
    question = models.CharField)

class Link(Information):
    url = models.CharField()

我想要一个用于访问所有Information对象的API,但仍希望能够访问每个子类的所有子类特定属性。在这种情况下,我想要3个资源:

class InformationResource(ModelResource):
    class Meta:
        queryset = Information.objects.all()

    def dehydrate(self, bundle):
        '''Add some extra meta data here'''

class QuestionResource(InformationResource):
    class Meta:
        queryset = Question.objects.all()

class LinkResource(InformationResource):
    class Meta:
        queryset = Link.objects.all()

这样我就有了一个api来返回所有的Information对象(以及所有这些对象共有的属性),但是如果我需要访问子类特定的属性,我可以通过他们的子类资源API访问它们。此外,这些子类资源可以访问为其超类定义的所有方法。例如,他们可以覆盖超类'脱水方法以添加更多字段。