Tastypie从继承的模型访问字段

Jon*_*nes 5 django tastypie

是否可以使用tastypie在相关模型上包含字段?

根据我的模型如下:如果我将一个VideoContent和一个TextContent实例持久保存到数据库,那么我可以从我的内容资源中获取2个对象,但是没有其他字段可用.

是否可以包含相关模型中的字段(在这个例子中,视频网址和文本内容),并且将来可以满足添加更多内容类型的需要,而无需重写内容资源,或者我是从方向错误?

目标是能够使用更多ContentTypes扩展它,而无需更改Content资源(假设它可以在第一时间使其工作)

Models.py:

class Content(models.Model):
    parent = models.ForeignKey('Content', related_name='children', null=True, blank=True)

class TextContent(Content):
    text = models.CharField(max_length=100)

class VideoContent(Content):
    url = models.CharField(max_length=1000)
Run Code Online (Sandbox Code Playgroud)

然后我的资源:

class ContentResource(ModelResource):
    children = fields.ToManyField('myapp.api.resources.ContentResource', 'children', null=True, full=True)

    class Meta:
        resource_name = 'content'
        queryset = ContentResource.objects.all()
        authorization = Authorization()
        always_return_data = True
Run Code Online (Sandbox Code Playgroud)

syn*_*tel 2

我在另一个答案中找到了一个很好的解决方案

为多表继承 Django 模型填充 tastypie 资源


我遇到了同样的问题 - 尽管我仍在解决它。到目前为止我已经弄清楚了两件事:

django-model-utils 提供了一个继承管理器,允许您使用抽象基类来查询其表,并可以自动向下转换查询结果。

需要注意的一件事是资源类可用的脱水/再水化方法。

这就是我所做的:

class CommandResource(ModelResource):

   class Meta:
        queryset = Command.objects.select_subclasses().all()
Run Code Online (Sandbox Code Playgroud)

这只能让你成功一半——资源还必须包括脱水/再水化的东西,因为你必须手动打包对象以便从用户传输(或接收)。

我现在意识到这是超级黑客,并且必须有一个由 tastypie 提供的更好/更干净的方法 - 他们不能指望你必须在这些类型的情况下进行这种类型的手动重新打包 - 但是,也许他们是这样。到目前为止,我只使用了大约 8 个小时的 tastypie 经验,所以如果我解释的全部错误,也许一些好的 stackoverflow 用户可以纠正我。:D :D :D