是否可以使用 tastypie 在相关模型上包含字段?
根据我的下面的模型:如果我将一个 VideoContent 和一个 TextContent 实例保存到数据库,我就可以从我的内容资源中获取 2 个对象,但是没有任何其他字段可用。
是否可以包含相关模型中的字段(在本例中为视频 url 和文本内容),并且可以在将来添加更多内容类型而无需重写内容资源,或者我是从方向错误?
目标是能够使用更多 ContentType 来扩展它,而无需更改内容资源(假设可以首先使其工作)
模型.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)
然后是我的资源:
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
我在另一个答案中找到了一个很好的解决方案
为多表继承 Django 模型填充 tastypie 资源 https://stackoverflow.com/questions/11924132/populate-a-o2m-modelresource/12049987#12049987
我遇到了同样的问题 - 尽管我仍在解决它。到目前为止我已经弄清楚了两件事:
django-model-utils 提供了一个继承管理器,允许您使用抽象基类来查询其表,并可以自动向下转换查询结果。
需要注意的一件事是脱水/补水 http://django-tastypie.readthedocs.org/en/latest/resources.html#the-dehydrate-cycle资源类可用的方法。
这就是我所做的:
class CommandResource(ModelResource):
class Meta:
queryset = Command.objects.select_subclasses().all()
这只能让你成功一半——资源还必须包括脱水/再水化的东西,因为你必须manually将对象打包以便从用户处传输(或接收)。
我现在意识到这是超级黑客,并且必须有一个由 tastypie 提供的更好/更干净的方法 - 他们不能指望你必须在这些类型的情况下进行这种类型的手动重新打包 - 但是,也许他们是这样。到目前为止,我只使用了大约 8 个小时的 tastypie 经验,所以如果我解释的全部错误,也许一些好的 stackoverflow 用户可以纠正我。 :D :D :D
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)